Text- und Pfeilfarbe der IOS 7-Navigationsleiste


234

Ich möchte den Hintergrund für die Navigationsleiste auf Schwarz und alle darin enthaltenen Farben auf Weiß einstellen .

Also habe ich diesen Code verwendet:

[[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]];

Aber zurück Schaltfläche Textfarbe , Pfeil und Bar - Taste hat immer noch den Standard blaue Farbe .
Wie ändere ich diese Farben wie auf dem Bild unten?

Geben Sie hier die Bildbeschreibung ein


1
Versuchen Sie es in AppDelegate, wenn ([self.window replyToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S


Interessanterweise hat Ihr Code für mich hervorragend funktioniert (ich wollte nur die Textfarbe in Weiß ändern). Vielen Dank!
William T. Mallard

Welche blaue Farbe verwenden Sie? Sieht gut aus!
ebi

@ebi manche Leute teilen nicht gerne. Verwenden Sie einfach einen Farbwähler, um ihn auszuwählen. Oder ... los geht's: RGB: (18, 60, 133)
pnizzle

Antworten:


753

Das Verhalten einiger Eigenschaften von UINavigationBarhat sich gegenüber iOS 7 geändert . Sie können im Bild unten sehen:

Geben Sie hier die Bildbeschreibung ein


Zwei schöne Links, die ich gerne mit Ihnen teilen möchte. Für weitere Details können Sie über diese Links gehen:

  1. iOS 7 UI Transition Guide .
  2. So aktualisieren Sie Ihre App für iOS 7 .

In der Apple-Dokumentation für barTintColor heißt es:

Diese Farbe ist standardmäßig durchscheinend, es sei denn, Sie setzen die durchscheinende Eigenschaft auf NO.

Beispielcode :

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

Ich habe versucht: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 grün: 12.0 / 255.0 blau: 19.0 / 255.0 alpha: 1.0]; Aber alles ist noch blau.
1110

2
Ich habe es vorher gelesen, aber dies ändert nur Text, aber nicht und Pfeil. Es ist immer noch blau :(
1110

1
@ 1110:
Werfen

2
@ Chelsea: Wie wäre es mit dieser Linie? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin

4
Vergessen Sie nicht, dass Sie den Farbton für die gesamte App im appDelegate ändern können: [[UINavigationBar-Darstellung] setTintColor: [UIColor blackColor]];
simon_smiley

85

Geben Sie hier die Bildbeschreibung ein

Ich brauchte ungefähr einen halben Tag, um das herauszufinden, aber das hat bei mir funktioniert. Im rootViewController, der den Navigationscontroller initialisiert, habe ich diesen Code in meine viewDidAppear-Methode eingefügt:

//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]];

Mein vollständiger Beitrag dazu hier


1
Wenn Sie Probleme haben, die Farbe des hinteren Pfeils zu ändern, wird das Problem durch dieses Snippet behoben. Sie benötigen mindestens die letzte Codezeile, die Ihrem eigentlichen rootViewController hinzugefügt wurde.
Russes

Ja, John. Ich habe gestern auch ungefähr eine Stunde damit verschwendet. Ein Problem (großes Problem) war, dass die Dokumente schrecklich darin waren, alle möglichen Attribute aufzuzeigen. Irgendeine Idee, wo sie aufgelistet sein könnten? TY.
Alex Zavatone

Danke @john Es überlappt meine benutzerdefinierte Farbe. Kannst du mir erklären warum?
Vaibhav Limbani

Ich denke, Sie sollten eine neue Frage erstellen. Ich konnte Ihnen nicht sagen warum, es sei denn, ich sehe Ihren Code und was Sie tun. @ MacGeek
John Riselvato

3
Danke, es hat funktioniert :). Aber UITextAttributeTextColor ist in iOS 7 veraltet, jetzt sollten Sie NSForegroundColorAttributeName
YYamil

37

Swift3, ios 10

So weisen Sie die Farbe in AppDelegate global zu 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

Vins Antwort hat bei mir großartig funktioniert. Hier ist die gleiche Lösung für C # -Entwickler, die Xamarin.iOS / MonoTouch verwenden:

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;

Ich wusste nicht, dass Sie SetTitleTextAttributes so einstellen können, wie Sie es getan haben.
Brad Moore

12

Swift / iOS8

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

3
let textAttributes = NSMutableDictionary (Kapazität: 1) ist jetzt der richtige Aufruf für die Initialisierung von NSMutableDictionary.
Juliensaad

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

1
Ich mag diesen Ansatz, da Sie ihn in AppDelegate selbst festlegen können und er den Proxy "Darstellung" verwendet.
Niyog Ray

8

UINavigationBarVerwenden Sie diesen Code, um die Farbe des Titels richtig zu ändern :

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

UITextAttributeTextColorist in der neuesten ios 7-Version veraltet. Verwenden Sie NSForegroundColorAttributeNamestattdessen.


5

Wenn Sie schauen , um den Titel zu ändern , Textgröße und die Textfarbe müssen Sie die NSDictionary ändern titleTextAttributes , für 2 seiner Objekte:

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

2

Ich denke, frühere Antworten sind richtig, dies ist eine andere Möglichkeit, dasselbe zu tun. Ich teile es hier mit anderen, nur für den Fall, dass es für jemanden nützlich wird. So können Sie die Text- / Titelfarbe für die Navigationsleiste in ios7 ändern:

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

Es scheint, dass AccessibilitySteuerelemente in der iOS SettingsÜberschreibung so ziemlich alles, was Sie versuchen, farblich mit den Schaltflächen der Navigationsleiste zu tun. Stellen Sie sicher, dass Sie alle Einstellungen auf die Standardpositionen eingestellt haben (Kontrast erhöhen, Fettdruck , Schaltflächenformen usw. deaktivieren), da sich sonst nichts ändert. Sobald ich es getan hatte, funktionierte der gesamte Farbänderungscode wie erwartet. Sie müssen sie möglicherweise nicht alle ausschalten, aber ich habe es nicht weiter verfolgt.


Genau das, was mir passiert ist. Ich konnte die Farbtonfarbe eines Balkenschaltflächenelements nicht ändern, wenn "Fettdruck" aktiviert war. Das ist nicht gut. Jetzt muss ich stattdessen eine Grafik verwenden :-(
Ken

0

Swift 5 / iOS 13

So ändern Sie die Farbe des Titels im Controller:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.