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?

Jonathan Thurft
sumber

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];
Seb Thiebaud
sumber
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];
LJ1
sumber
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];
Lasse Bunk
sumber
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

Dustin Williams
sumber
8

Swift :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
Hemang
sumber
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!

ronm333
sumber
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.

e1985
sumber
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];
amar
sumber
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

iOS
sumber
-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.

ganka
sumber