IOS 7 Navigation Bar teks dan warna panah


234

Saya ingin mengatur latar belakang agar Bar Navigasi menjadi hitam dan semua warna di dalamnya menjadi putih .

Jadi, saya menggunakan kode ini:

[[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      NSForegroundColorAttributeName,
      [UIFont fontWithName:@"Arial-Bold" size:0.0],
      NSFontAttributeName,
      nil]];

Tapi tombol back warna teks , panah dan tombol bar telah masih bawaan warna biru .
Bagaimana cara mengubah warna-warna tersebut seperti pada gambar di bawah ini?

masukkan deskripsi gambar di sini


1
coba di AppDelegate jika ([self.window respondToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S


Menariknya kode Anda berfungsi baik untuk saya (hanya ingin mengubah warna teks menjadi putih). Terima kasih!
William T. Mallard

Apa warna biru yang Anda gunakan? Terlihat bagus!
ebi

@ebi beberapa orang tidak suka berbagi. Cukup gunakan pemetik warna untuk memilihnya. Atau ....
begini

Jawaban:


753

Perilaku dari beberapa properti UINavigationBartelah berubah dari iOS 7 . Anda dapat melihat gambar di bawah ini:

masukkan deskripsi gambar di sini


Dua tautan indah yang ingin saya bagikan dengan Anda. Untuk perincian lebih lanjut, Anda dapat mengunjungi tautan ini:

  1. iOS 7 UI Transition Guide .
  2. Cara Memperbarui Aplikasi Anda untuk iOS 7 .

Dokumentasi Apple untuk barTintColor mengatakan:

Warna ini dibuat transparan secara default kecuali jika Anda mengatur properti transparan ke NO.

Kode sampel :

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;

Saya telah mencoba: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 hijau: 12.0 / 255.0 biru: 19.0 / 255.0 alfa: 1.0]; Tapi semuanya masih biru.
1110

2
Saya membacanya sebelumnya tetapi ini hanya mengubah teks tetapi tidak dan panah. Ini masih biru :(
1110

1
@ 1110: Lihatlah: Menggunakan Warna Warna
Bhavin

2
@ Chelsea: Bagaimana dengan baris ini? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin

4
Jangan lupa Anda dapat mengubah warna untuk seluruh aplikasi di appDelegate: [[UINavigationBar appearance] setTintColor: [UIColor blackColor]];
simon_smiley

85

masukkan deskripsi gambar di sini

Yang ini memakan waktu sekitar setengah hari untuk mencari tahu, tetapi inilah yang berhasil bagi saya. Di dalam rootViewController yang menginisialisasi navigationController, saya meletakkan kode ini di dalam metode viewDidAppear saya:

//set bar color
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:85.0/255.0 green:143.0/255.0 blue:220.0/255.0 alpha:1.0]];
//optional, i don't want my bar to be translucent
[self.navigationController.navigationBar setTranslucent:NO];
//set title and title color
[self.navigationItem setTitle:@"Title"];
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];
//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

Pos lengkap saya tentang ini di sini


1
Jika Anda mengalami masalah dalam mengubah warna panah belakang, snippet ini akan memperbaiki masalahnya. Minimal, Anda akan membutuhkan baris kode terakhir ditambahkan ke rootViewController Anda yang sebenarnya.
russes

Ya, John. Saya menghabiskan sekitar satu jam untuk kemarin ini juga. Satu masalah (masalah besar) adalah bahwa dokumen itu mengerikan dalam menunjukkan semua atribut yang mungkin. Adakah di mana mereka mungkin terdaftar? TY.
Alex Zavatone

Terima kasih @ John Ini tumpang tindih Warna Kustom saya, Dapatkah Anda menjelaskan mengapa?
Vaibhav Limbani

Saya pikir Anda harus membuat pertanyaan baru. Saya tidak bisa memberi tahu Anda mengapa kecuali saya melihat kode Anda dan apa yang Anda lakukan. @MacGeek
John Riselvato

3
Terima kasih, itu berhasil :). Tapi UITextAttributeTextColor sudah usang di iOS 7, sekarang Anda harus menggunakan NSForegroundColorAttributeName
YYamil

37

Swift3, ios 10

Untuk menetapkan warna secara global, di AppDelegate didFinishLaunchingWithOptions:

let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

Swift 4, iOS 11

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

21

Jawaban Kevin sangat membantu saya. Berikut adalah solusi yang sama untuk pengembang C # menggunakan Xamarin.iOS / MonoTouch:

var navigationBar = NavigationController.NavigationBar; //or another reference
navigationBar.BarTintColor = UIColor.Blue;
navigationBar.TintColor = UIColor.White;
navigationBar.SetTitleTextAttributes(new UITextAttributes() { TextColor = UIColor.White });
navigationBar.Translucent = false;

Tidak tahu Anda bisa mengatur SetTitleTextAttribut seperti yang Anda lakukan.
Brad Moore

12

Swift / iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes

3
biarkan textAttributes = NSMutableDictionary (kapasitas: 1) sekarang panggilan yang tepat untuk inisialisasi NSMutableDictionary.
juliensaad

12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

1
Saya suka pendekatan ini karena Anda dapat mengatur ini di AppDelegate sendiri, dan menggunakan proxy Appearance.
Niyog Ray

8

Untuk mengubah warna UINavigationBarjudul dengan cara yang benar gunakan kode ini:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];

UITextAttributeTextColorsudah usang dalam versi ios 7 terbaru. Gunakan NSForegroundColorAttributeNamesebagai gantinya.


5

Jika Anda ingin mengubah ukuran teks judul dan warna teks Anda harus mengubah NSDictionary titleTextAttributes , untuk 2 objeknya:

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13.0],NSFontAttributeName,
                                                                  [UIColor whiteColor], NSForegroundColorAttributeName, 
                                                                  nil];

2

Saya pikir jawaban sebelumnya benar, ini adalah cara lain untuk melakukan hal yang sama. Saya membagikannya di sini dengan orang lain untuk berjaga-jaga jika itu bermanfaat bagi seseorang. Ini adalah bagaimana Anda dapat mengubah warna teks / judul untuk navbar di ios7:

UIColor *red = [UIColor colorWithRed:254.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navigationController.navigationBar.titleTextAttributes = navBarTextAttributes;

1

Tampaknya Accessibilitykontrol dalam iOS Settingspenggantian hampir semua yang Anda coba lakukan dengan bijaksana untuk tombol bilah navigasi. Pastikan Anda memiliki semua pengaturan ke posisi default (atur peningkatan kontras, teks tebal , bentuk tombol, dll ke mati) jika tidak, Anda tidak akan melihat perubahan apa pun. Setelah saya melakukannya, semua kode perubahan warna mulai berfungsi seperti yang diharapkan. Anda mungkin tidak perlu mematikan semuanya, tapi saya tidak mengejar lebih jauh.


Persis apa yang terjadi pada saya. Saya tidak dapat mengubah warna warna item tombol bilah ketika "Teks Tebal" aktif. Itu tidak baik. Sekarang saya harus menggunakan grafik sebagai gantinya :-(
Ken

0

Swift 5 / iOS 13

Untuk mengubah warna judul pada pengontrol:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
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.