Bagaimana mengubah warna latar belakang UINavigationBar dari AppDelegate


91

Saya tahu cara mengubah UINavigationBargambar latar belakang dengan melakukan

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

dan saya tahu bagaimana mengatur bar ke warna yang berbeda di masing-masing Views..... Sekarang saya ingin mengubah warna latar belakang tanpa menggunakan gambar menjadi warna solid dari app delegate. Saya tidak ingin mengaturnya setiap kali dari setiap tampilan dan saya tidak ingin menulis CGRect.

Saya mencoba [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];tetapi saya tidak berhasil dan saya tidak dapat menemukan kode di mana pun yang berfungsi di delegasi aplikasi.

Adakah yang bisa tolong arahkan saya ke arah yang benar?

Jawaban:


203

Kamu bisa memakai [[UINavigationBar appearance] setTintColor:myColor];

Sejak iOS 7 Anda perlu mengatur [[UINavigationBar appearance] setBarTintColor:myColor];dan juga [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

Terima kasih, apakah Anda tahu cara menghapus gradien default putih yang berasal dari atas untuk membuatnya menjadi warna solid?
Jonathan Thurft

1
Dengan tintColorgradien akan tetap. Jika Anda tidak ingin memiliki gradien ini, Anda perlu membuat subkelas UINavigationBar ATAU membuat UIImage untuk tampilan tersebut.
Seb Thiebaud

59
di iOS 7 yang tidak berfungsi, saya harus menggunakannavigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentproperti tidak dapat diatur menggunakan UIApearance di iOS 6 dan iOS 7. Jadi [[UINavigationBar appearance] setTranslucent:NO]akan merusak aplikasi dengan NSInvalidArgumentExceptionkesalahan. Gunakan [self.navigationController.navigationBar setTranslucent:NO]atau batalkan pilihan transparansi menggunakan IB.
Sam

1
Versi Swift: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

Untuk mengubah warna latar belakang dan bukan warna, potongan kode berikut akan berfungsi:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

3
Ini harus menjadi jawaban yang diterima, berfungsi dengan sempurna untuk iOS7.
joshuahornby10

Jawaban yang benar untuk iOS 7. Bekerja untuk saya.
LondonGuy

Transparansi adalah persyaratan untuk membuat ini berfungsi. Karena jawaban yang diterima tidak termasuk itu, ini harus menjadi jawaban yang diterima.
Tristan Warner-Smith

3
Hanya untuk memperjelas, jawaban yang diterima adalah untuk AppDelegate dan ini untuk dalam View Controller.
Dean

@Dean benar. Jawaban yang diterima akan berlaku untuk yang baru dibuat UIViewControllers, sementara yang ini akan menunjukkan efek setiap kali dipanggil.
aramusss

19

Untuk melakukan ini di iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];

15

Sintaks cepat:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Saya baru saja meletakkannya di AppDelegate didFinishLaunchingWithOptions dan itu tetap ada di seluruh aplikasi


8

Swift :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false

6

Anda dapat dengan mudah melakukan ini dengan Xcode 6.3.1. Pilih NavigationBar Anda di kerangka Dokumen. Pilih Attributes Inspector. Hapus centang Translucent. Atur Bar Tint ke warna yang Anda inginkan. Selesai!


Terima kasih, saya menemukan banyak referensi tentang cara melakukan ini di ObjC dan swift, tetapi tidak ada yang menyebutkan tersedia di IB
Nick

3

Seperti yang disebutkan dalam jawaban lain, Anda dapat menggunakan setTintColor:, tetapi Anda menginginkan warna yang solid dan tidak mungkin melakukan pengaturan AFAIK warna tint.

Solusinya adalah membuat gambar secara terprogram dan menetapkan gambar itu sebagai gambar latar belakang untuk semua bilah navigasi melalui UIAppearance. Tentang ukuran gambar, saya tidak yakin apakah gambar 1x1 piksel akan berfungsi atau apakah Anda memerlukan ukuran yang tepat dari bilah navigasi Periksa jawaban kedua dari pertanyaan ini untuk melihat cara membuat gambar.

Sebagai saran, saya tidak suka "membebani" delegasi aplikasi dengan hal-hal semacam ini. Yang cenderung saya lakukan adalah membuat kelas bernama AppearanceConfigurationhanya dengan satu metode publik di configureAppearancemana saya mengatur semua hal-hal UIApearance yang saya inginkan, dan kemudian saya memanggil metode itu dari delegasi aplikasi.


2

Anda dapat menyetel warna Latar Belakang UINavigasi dengan menggunakan kode ini di pengontrol tampilan mana pun

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

Di Swift 4.2 dan Xcode 10.1

Anda dapat mengubah warna bilah navigasi dari AppDelegate langsung ke seluruh proyek Anda.

Di didFinishLaunchingWithOptions launchOptions:tulis di bawah ini ke baris kode

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Sini

tintColor adalah untuk mengatur gambar latar belakang seperti tombol kembali & gambar garis menu dll (Lihat gambar menu kiri dan kanan di bawah)

barTintColor adalah untuk warna latar belakang bilah navigasi

Jika Anda ingin menyetel warna bilah navigasi pengontrol tampilan tertentu, tulis kode di bawah ini di viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

masukkan deskripsi gambar di sini


-1

Kode warna menjadi masalah di sini. Alih-alih menggunakan 195/255, gunakan 0.7647 atau 195.f / 255.f Masalahnya adalah mengonversi float tidak berfungsi dengan benar. Coba gunakan nilai float yang tepat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.