Come cambiare il colore della barra di navigazione in iOS 7?


213

Come posso cambiare il colore della barra di navigazione in iOS 7?

Fondamentalmente voglio ottenere qualcosa come la barra di navigazione di Twitter (Twitter aggiornato per iOS7questo è). Ho incorporato una barra di navigazione in cima a view controller. Tutto quello che voglio è cambiare il colore della barra di navigazione in azzurro insieme alla barra delle utilità in alto. Non riesco a trovare un'opzione nel mio storyboard.



[[Aspetto UINavigationBar] setBarTintColor: [UIColor blackColor]]; questo funzionerà da iOS 7 in poi
Chandramani,

Risposte:


319

Il comportamento di tintColorfor bars è cambiato in iOS 7.0. Non influisce più sullo sfondo della barra.

Dalla documentazione:

Riferimento della classe barTintColor

Il colore della tinta da applicare allo sfondo della barra di navigazione.

@property(nonatomic, retain) UIColor *barTintColor

Discussione
Questo colore è reso traslucido per impostazione predefinita a meno che non si imposti la proprietà traslucida su NO.

Disponibilità

Disponibile in iOS 7.0 e versioni successive.

Dichiarato in
UINavigationBar.h

Codice

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

Possiamo anche usarlo per controllare la versione di iOS come menzionato nella Guida alla transizione dell'interfaccia utente di iOS 7

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;
    }

MODIFICA Usando xib

inserisci qui la descrizione dell'immagine


3
ma dove posso inserire questo codice ?? Sono molto nuovo di questo hahah. L'ho inserito all'interno del delegato dell'app e non sembra davvero fare molto. Costruisce bene però.
Patricio Guerra,

1
inside viewController
Rajneesh071

1
Lo metterei in viewDidLoad nel tuo viewController.
HalR

2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Sarebbe meglio testare la versione iOS su cui stai eseguendo, come affermato da apple nella guida alla transizione: developer.apple.com/library/ios/documentation/userexperience/…
David Thompson,

1
Puoi anche usare if ([self.navigationController.navigationBar respondsToSelector: @selector (setBarTintColor :)]) rispetto al numero di versione per verificare se puoi impostare barTintColor
SimpsOff

129

Fare quello che la domanda originale poneva — per ottenere l'aspetto della vecchia barra di navigazione di Twitter, sfondo blu con testo bianco — è molto facile da fare semplicemente usando Interface Builder in Xcode.

  • Utilizzando la struttura del documento, selezionare la barra di navigazione.
  • In Impostazioni Attributi, nel gruppo Barra di navigazione, cambia lo Stile da Predefinito a Nero. Ciò cambia il colore di sfondo delle barre di navigazione e di stato in nero e il loro testo in bianco. Quindi la batteria e altre icone e testo nella barra di stato appariranno bianchi quando l'app è in esecuzione.
  • Nello stesso gruppo della barra di navigazione, cambia la tonalità della barra con il colore che preferisci.
  • Se nella barra di navigazione sono presenti elementi del pulsante della barra, questi mostreranno comunque il loro testo nel colore blu predefinito, quindi nell'Ispettore Attributi, gruppo Visualizza, cambia la Tinta in Colore bianco.

Questo dovrebbe darti quello che vuoi. Ecco uno screenshot che renderebbe più semplice vedere dove apportare le modifiche.

Dove apportare le modifiche necessarie, incluso il risultato in iOS Simulator

Nota che cambiando solo la Tinta della barra non cambia il colore del testo nella barra di navigazione o nella barra di stato. Anche lo stile deve essere modificato.


La selezione del nero per iOS 9 è obsoleta, ogni possibilità di una risposta aggiornata
Rob85

@ Rob85 Non sono di fronte a Xcode in questo momento, ma quando Xcode 7 (con iOS 9) è stato rilasciato ho verificato che queste istruzioni erano ancora aggiornate. Assicurati che la barra di navigazione sia selezionata, lo stile nero dovrebbe essere nella finestra di ispezione degli attributi della barra di navigazione.
alondono,

2
@ Rob85 Ho controllato il sito Web e gli stili di sviluppo di Apple Defaulte Blacksono ancora disponibili in iOS 9. Quelli deprecati sono BlackOpaquee BlackTranslucent, che sono stati sostituiti da una combinazione di Blackstile e la casella di controllo Traslucido. UIBarStyle sul sito Web degli sviluppatori Apple
alondono,

Scusate @alondono, avete assolutamente ragione, stavo facendo clic sulla barra di navigazione sul controller di navigazione non nella struttura del documento, ecco perché non riuscivo a vederlo. Il nero che vedo deprecato era sulla barra di stato delle metriche simulate->. Grazie per le risposte
Rob85,

@ Rob85 Cool! Grazie per avermi fatto sapere.
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

4
E dove posso esattamente mettere questo codice ?? Ci scusiamo per la domanda da principiante lì ahah
Patricio Guerra,

1
il codice può essere inserito nella modalità - (void) viewDidLoad del controller di navigazione
pNre

2
In iOS 9, l'impostazione di barTintColor su nero renderà anche l'ora, il nome del dispositivo e la batteria neri in modo da non poterli vedere. Per evitare ciò, invece di utilizzare barTintColor, utilizzare self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
TheJeff

46

In un'app basata sulla navigazione è possibile inserire il codice in AppDelegate. Un codice più dettagliato potrebbe essere:

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

6
aggiungi [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];per iOS 7
Samin il

24

In viewDidLoad, imposta:

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

Cambia ( blueColor) nel colore che desideri.


18

Per cambiare rapidamente il colore della barra di navigazione:

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

cambia titolo, dimensione, colore:

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

14

In iOS 7 è necessario utilizzare la proprietà -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];

13

Se vuoi usare un codice esadecimale, ecco il modo migliore per farlo.

Innanzitutto, definiscilo nella parte superiore della tua classe:

#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]

Quindi all'interno dell'applicazione "application didFinishLaunchingWithOptions", inserisci questo:

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

Metti il ​​tuo codice esadecimale al posto di 00b0f0.


1
[L'aspetto di UINavigationBar] è stato molto utile.
Ken,

11

Se hai bisogno di supportare ios6 e ios7, ottieni quel particolare azzurro usando questo nel tuo UIViewController :

- (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];
    }
}

3
Su iOS 7: -self.navigationController.navigationBar.barTintColor è il colore della barra AND -self.navigationController.navigationBar.tintColor è il colore del testo dei pulsanti (indietro, fatto ...).
IgniteCoders

10

In realtà è più facile delle risposte che ho visto qui:

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).

Spero che questo aiuti qualcuno. Non mi sono piaciute le risposte che ho visto. Mi piace mantenere il mio codice il più pulito possibile. Non dire che è sbagliato farlo programmaticamente, ma ci sono persone là fuori come me .... questo è per voi ragazzi. Modifica del colore della barra di navigazione


Grazie, mi sono cambiato mesi fa mentre giocavo e non sono riuscito a capire come cambiarlo!
Simmetrico

Nessun problema, felice di poter aiutare qualcuno
pqsk,

Penso che questa sia la risposta più semplice! Grazie
Ispas Claudiu il

Nessun problema. Sono contento che sia ancora utile
pqsk

5

Per rendere completo il codice di Rajneesh071, potresti anche voler impostare il colore del titolo della barra di navigazione (e il carattere, se lo desideri) poiché il comportamento predefinito è cambiato da iOS 6 a 7:

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

5

Aggiungi solo questo codice nel tuo ViewContorller o nel tuoAppDelegate

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

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;
}

4

In un'applicazione basata sulla navigazione puoi cambiare colore

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

1
La modifica della proprietà tintColor in iOS7 non ha più l'effetto di modificare il colore di sfondo delle barre. Il colore della tinta in iOS7 influisce solo sul colore del testo di BarButtonItems ecc.
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]];
    }

3

Questa domanda e queste risposte sono utili. Con loro sono stato in grado di impostare il colore blu scuro desiderato navigationBarcon il titolo bianco e il testo del pulsante.

Ma dovevo anche cambiare l'orologio, il vettore, la potenza del segnale, ecc. In bianco. Il nero non era abbastanza in contrasto con il blu scuro.

Forse ho trascurato il fatto che la soluzione in una delle risposte precedenti, ma sono stato in grado di fare questo cambiamento con l'aggiunta di questa linea al mio livello superiore viewController's viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

UIStatusBarStyleLightContentfunziona, ma sembra che l'enumerazione corretta setBarStyle:siaUIBarStyleBlack
Collin Allen,

3
- (void)viewDidLoad
{
    [super viewDidLoad];

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

3

Per colore:

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

Per immagine

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.