Barra di navigazione IOS 7 e colore della freccia


234

Voglio impostare lo sfondo affinché la barra di navigazione sia nera e tutti i colori al suo interno siano bianchi .

Quindi, ho usato questo codice:

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

Ma tasto posteriore colore del testo , freccia e pulsante della barra hanno ancora predefiniti colore blu .
Come cambiare quei colori come nell'immagine qui sotto?

inserisci qui la descrizione dell'immagine


1
provare in AppDelegate if ([self.window risponde a ToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S,


È interessante notare che il tuo codice ha funzionato perfettamente per me (volevo solo cambiare il colore del testo in bianco). Grazie!
William T. Mallard,

Qual è il colore blu che stai usando? Sembra bello!
ebi,

@ebi ad alcune persone non piace condividere. Basta usare un selettore di colori per selezionarlo. O ....
eccoti

Risposte:


753

Il comportamento di alcune delle proprietà di UINavigationBarè cambiato da iOS 7 . Puoi vedere nell'immagine mostrata di seguito:

inserisci qui la descrizione dell'immagine


Due bellissimi link che vorrei condividere con te. Per maggiori dettagli puoi consultare questi link:

  1. Guida alla transizione dell'interfaccia utente di iOS 7 .
  2. Come aggiornare la tua app per iOS 7 .

La documentazione Apple per barTintColor dice:

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

Codice di esempio :

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

Ho provato: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 verde: 12.0 / 255.0 blu: 19.0 / 255.0 alfa: 1.0]; Ma tutto è ancora blu.
1110

2
L'ho letto prima, ma questo cambiamento solo testo ma non e freccia. È ancora blu :(
1110

1
@ 1110: dai un'occhiata a: Utilizzo di Tint Color
Bhavin,

2
@Chelsea: che ne dici di questa linea? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin,

4
Non dimenticare che puoi cambiare la tinta per l'intera app in appDelegate: [[UINavigationBar aspetto] setTintColor: [UIColor blackColor]];
simon_smiley,

85

inserisci qui la descrizione dell'immagine

Questo mi ha impiegato circa mezza giornata per capire, ma questo è ciò che ha funzionato per me. All'interno del rootViewController che inizializza il navigationController, ho inserito questo codice nel mio metodo viewDidAppear:

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

Il mio post completo su questo qui


1
Se riscontri problemi nel cambiare il colore della freccia indietro, questo frammento risolverà il problema. Come minimo, avrai bisogno dell'ultima riga di codice aggiunta al tuo vero rootViewController.
russi,

Sì, John. Ho perso circa un'ora anche su questo ieri. Un problema (grosso problema) era che i documenti erano terribili nel sottolineare tutti i possibili attributi. Qualche idea su dove potrebbero essere elencati? TY.
Alex Zavatone,

Grazie @john Si sovrappone al mio colore personalizzato, puoi spiegarmi perché?
Vaibhav Limbani,

Penso che dovresti creare una nuova domanda. Non saprei dirti perché se non vedo il tuo codice e cosa stai facendo. @MacGeek
John Riselvato,

3
Grazie, ha funzionato :). Ma UITextAttributeTextColor è obsoleto in iOS 7, ora dovresti usare NSForegroundColorAttributeName
YYamil

37

Swift3, ios 10

Per assegnare globalmente il colore, in 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

La risposta di Vin ha funzionato benissimo per me. Ecco la stessa soluzione per gli sviluppatori C # che utilizzano 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;

Non sapevo che potresti impostare SetTitleTextAttributes come hai fatto.
Brad Moore,

12

Swift / iOS8

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

3
let textAttributes = NSMutableDictionary (capacità: 1) è ora la chiamata corretta per l'inizializzazione di NSMutableDictionary.
luglio

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

1
Mi piace questo approccio poiché puoi impostarlo in AppDelegate stesso e utilizza il proxy Appearance.
Niyog Ray

8

Per cambiare il colore del UINavigationBartitolo nel modo corretto usa questo codice:

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

UITextAttributeTextColorè obsoleto nella versione più recente di iOS 7. Usa NSForegroundColorAttributeNameinvece.


5

Se stai cercando di cambiare la dimensione del testo del titolo e il colore del testo, devi cambiare il titolo NSDictionaryTextAttributes , per 2 dei suoi oggetti:

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

2

Penso che le risposte precedenti siano corrette, questo è un altro modo di fare la stessa cosa. Lo condivido qui con gli altri nel caso in cui diventi utile per qualcuno. Ecco come è possibile modificare il colore del testo / titolo per la barra di navigazione in 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

Sembra che i Accessibilitycontrolli in iOS Settingsoverride siano praticamente tutto ciò che si tenta di fare in termini di colore con i pulsanti della barra di navigazione. Assicurati di avere tutte le impostazioni nelle posizioni predefinite (imposta aumento contrasto, testo in grassetto , forme dei pulsanti, ecc. Su off) altrimenti non vedrai nulla cambiare. Una volta che l'ho fatto, tutto il codice di cambio colore ha iniziato a funzionare come previsto. Potrebbe non essere necessario spegnerli tutti, ma non ho proseguito.


Esattamente quello che mi è successo. Non ero in grado di cambiare il colore della tinta di un elemento del pulsante della barra quando era attivo "Grassetto". Non è buono. Ora dovrò usare un grafico invece :-(
Ken

0

Swift 5 / iOS 13

Per cambiare il colore del titolo nel controller:

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