Wie ändere ich die Farbe der Navigationsleiste in iOS 7?

213

Wie ändere ich die Farbe der Navigationsleiste in iOS 7?

Grundsätzlich möchte ich so etwas wie die Twitter Nav Bar erreichen (dafür ist Twitter aktualisiert iOS7). Ich habe in eine Navigationsleiste auf einem eingebettet view controller. Ich möchte nur die Farbe der Navigationsleiste in Hellblau ändern, zusammen mit der Utility-Leiste oben. Ich kann anscheinend keine Option in meinem finden storyboard.

Patricio Guerra
quelle
[[UINavigationBar-Darstellung] setBarTintColor: [UIColor blackColor]]; Dies wird ab iOS 7 funktionieren
Chandramani
1
Folgen Sie
Chandramani

Antworten:

319

Das Verhalten von tintColorfür Balken hat sich in iOS 7.0 geändert. Der Hintergrund der Leiste wird nicht mehr beeinflusst.

Aus der Dokumentation:

barTintColor- Klassenreferenz

Die Farbtonfarbe, die auf den Hintergrund der Navigationsleiste angewendet werden soll.

@property(nonatomic, retain) UIColor *barTintColor

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

Verfügbarkeit

Verfügbar in iOS 7.0 und höher.

In UINavigationBar.h deklariert

Code

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

Wir können dies auch verwenden, um die iOS-Version zu überprüfen, wie im iOS 7 UI Transition Guide erwähnt

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

EDIT Mit xib

Geben Sie hier die Bildbeschreibung ein

Rajneesh071
quelle
3
aber wo kann ich diesen Code platzieren? Ich bin sehr neu in diesem hahah. Ich habe es innerhalb des App-Delegaten platziert und es scheint wirklich nicht viel zu tun. Es baut sich aber gut auf.
Patricio Guerra
1
inside viewController
Rajneesh071
1
Ich würde es in viewDidLoad in Ihrem viewController einfügen.
HalR
2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Dies ist besser, um zu testen, auf welcher iOS-Version Sie ausgeführt werden, wie von Apple im Übergangshandbuch angegeben: developer.apple.com/library/ios/documentation/userexperience/…
David Thompson
1
Sie können auch if ([self.navigationController.navigationBar respondsToSelector: @selector (setBarTintColor :)]) und die Versionsnummer verwenden, um zu überprüfen, ob Sie barTintColor
SimpsOff
129

Mit dem Interface Builder in Xcode ist es sehr einfach, das zu tun, was in der ursprünglichen Frage gestellt wurde - um das Aussehen der alten Navigationsleiste von Twitter mit blauem Hintergrund und weißem Text zu erhalten.

  • Wählen Sie in der Dokumentübersicht Ihre Navigationsleiste aus.
  • Ändern Sie im Attributinspektor in der Gruppe Navigationsleiste den Stil von Standard in Schwarz. Dadurch wird die Hintergrundfarbe der Navigations- und Statusleisten in Schwarz und der Text in Weiß geändert. Der Akku und andere Symbole und Texte in der Statusleiste sehen also weiß aus, wenn die App ausgeführt wird.
  • Ändern Sie in derselben Navigationsleistengruppe die Balkentönung in die gewünschte Farbe.
  • Wenn Ihre Navigationsleiste Elemente mit Balkenschaltflächen enthält, wird deren Text weiterhin in der standardmäßigen blauen Farbe angezeigt. Ändern Sie daher im Attributinspektor in der Gruppe Ansicht den Farbton in Weiße Farbe.

Das sollte dir bringen, was du willst. Hier ist ein Screenshot, mit dem Sie leichter erkennen können, wo die Änderungen vorgenommen werden müssen.

Wo Sie die erforderlichen Änderungen vornehmen können, einschließlich des Ergebnisses in iOS Simulator

Beachten Sie, dass durch Ändern nur der Balkentönung die Textfarbe in der Navigationsleiste oder der Statusleiste nicht geändert wird. Der Stil muss ebenfalls geändert werden.

Alondono
quelle
Die Auswahl von Schwarz für iOS 9 ist veraltet, jede Chance auf eine aktualisierte Antwort
Rob85
@ Rob85 Ich bin momentan nicht vor Xcode, aber als Xcode 7 (mit iOS 9) veröffentlicht wurde, habe ich überprüft, ob diese Anweisungen noch aktuell sind. Stellen Sie sicher, dass die Navigationsleiste ausgewählt ist. Der schwarze Stil sollte sich im Attributinspektor der Navigationsleiste befinden.
Alondono
2
@ Rob85 Ich habe Apples Entwickler - Website überprüft und Designs Defaultund Blackin iOS 9. Die veralteten diejenigen noch verfügbar sind BlackOpaqueund BlackTranslucent, die durch eine Kombination ersetzt wurden BlackStil und die Durchlässiger tick-box. UIBarStyle auf Apples Entwickler-Website
Alondono
Entschuldigung @alondono, Sie sind absolut korrekt. Ich habe auf die Navigationsleiste des Navigationscontrollers geklickt, nicht in der Dokumentskizze. Deshalb konnte ich sie nicht sehen. Das Schwarz, das ich veraltet sehe, war in der simulierten Metrik-> Statusleiste. Vielen Dank für Ihre Antworten
Rob85
@ Rob85 Cool! Danke für die Information.
Alondono
76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color
pNre
quelle
4
Und wo genau kann ich diesen Code setzen? Entschuldigung für die Neuling Frage dort hahah
Patricio Guerra
1
Der Code kann in die - (void) viewDidLoad-Methode des Navigationscontrollers
eingefügt
2
Wenn Sie in iOS 9 barTintColor auf Schwarz setzen, werden Uhrzeit, Gerätename und Akku ebenfalls schwarz, sodass Sie sie nicht sehen können. Um dies zu vermeiden, verwenden Sie anstelle von barTintColor self.navigationController.navigationBar.barStyle = UIBarStyleBlack.
TheJeff
46

In einer navigationsbasierten App können Sie den Code in AppDelegate einfügen. Ein detaillierterer Code könnte sein:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];
RFG
quelle
6
Hinzufügen [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];für iOS 7
Samin
24

In viewDidLoad, setze:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Ändern Sie ( blueColor) in die gewünschte Farbe.

Zeezoo
quelle
18

Für eine schnelle Änderung der Farbe der Navigationsleiste:

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

Titel, Schriftgröße, Farbe ändern:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]
William Hu
quelle
14

In iOS 7 müssen Sie die Eigenschaft -barTintColor verwenden:

navController.navigationBar.barTintColor = [UIColor barColor];
RFG
quelle
13

Wenn Sie einen Hex-Code verwenden möchten, ist dies der beste Weg, dies zu tun.

Definieren Sie dies zunächst oben in Ihrer Klasse:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Fügen Sie dann in die "Anwendung didFinishLaunchingWithOptions" Folgendes ein:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

Setzen Sie Ihren Hex-Code anstelle von 00b0f0 ein.

Kyle Greenlaw
quelle
1
[UINavigationBar Aussehen] war sehr hilfreich.
Ken
11

Wenn Sie ios6 und ios7 unterstützen müssen, erhalten Sie dieses spezielle Hellblau, indem Sie dies in Ihrem UIViewController verwenden :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}
bbaassssiiee
quelle
3
Unter iOS 7: -self.navigationController.navigationBar.barTintColor ist die Balkenfarbe UND -self.navigationController.navigationBar.tintColor ist die Textfarbe der Schaltflächen (zurück, fertig ...).
IgniteCoders
10

Es ist tatsächlich einfacher als die Antworten, die ich hier gesehen habe:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

Ich hoffe das hilft jemandem. Die Antworten, die ich sah, gefielen mir nicht. Ich möchte meinen Code so sauber wie möglich halten. Ich sage nicht, dass es falsch ist, es programmatisch zu tun, aber es gibt Leute wie mich da draußen ... das ist für euch. Ändern der Farbe der Navigationsleiste

pqsk
quelle
Danke, ich hatte mich vor Monaten beim Herumspielen verändert und konnte nicht herausfinden, wie ich es wieder ändern kann!
Symmetrisch
Kein Problem, ich bin froh, dass ich jemandem helfen konnte
pqsk
Ich denke, das ist die direkteste Antwort! Thx
Ispas Claudiu
Kein Problem.
Ich bin
5

Um den Code von Rajneesh071 zu vervollständigen, möchten Sie möglicherweise auch die Titelfarbe (und gegebenenfalls die Schriftart) der Navigationsleiste festlegen, da sich das Standardverhalten von iOS 6 auf 7 geändert hat:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}
CodeBrew
quelle
5

Fügen Sie nur diesen Code in Ihre ViewContorller oder in IhreAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
Darshan Kunjadiya
quelle
4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}
Dashony
quelle
4

In einer navigationsbasierten Anwendung können Sie die Farbe ändern

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
MaxEcho
quelle
1
Das Ändern der tintColor-Eigenschaft in iOS7 hat keine Auswirkungen mehr auf das Ändern der Hintergrundfarbe der Balken. Die Farbtonfarbe in iOS7 wirkt sich nur auf die Textfarbe der BarButtonItems usw. aus
Pascal Bayer
4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }
Mubin Shaikh
quelle
3

Diese Frage und diese Antworten sind hilfreich. Mit ihnen konnte ich mein gewünschtes Dunkelblau einstellennavigationBar Farbe mit weißem Titel und Schaltflächentext .

Aber ich musste auch die Uhr, den Träger, die Signalstärke usw. auf Weiß ändern. Schwarz kontrastierte einfach nicht genug mit dem Dunkelblau.

Vielleicht habe ich übersehen , dass die Lösung in eines der vorhergehenden Antworten, aber ich war in der Lage zu machen , dass der Wandel durch diese Linie zu meinem Top - Level - Zugabe viewController‚s viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
John
quelle
UIStatusBarStyleLightContentfunktioniert, aber es scheint die richtige Aufzählung für setBarStyle:istUIBarStyleBlack
Collin Allen
3
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Gaurav Gilani
quelle
3

Für Farbe:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Für Bild

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];

quelle