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.