Come modificare il colore di sfondo di UINavigationBar da AppDelegate


90

So come cambiare l' UINavigationBarimmagine di sfondo in questo modo

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

e so come impostare la barra su diversi colori all'interno di ciascuna Views..... Ora voglio cambiare il colore di sfondo senza utilizzare un'immagine in un colore solido dal app delegate. Non voglio impostarlo ogni volta da ogni vista e non voglio scrivere un file CGRect.

Ho provato [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];ma non funziona e non riesco a trovare un codice da nessuna parte che funzioni nel delegato dell'app.

Qualcuno potrebbe indicarmi la giusta direzione?

Risposte:


202

Puoi usare [[UINavigationBar appearance] setTintColor:myColor];

Da iOS 7 è necessario impostare [[UINavigationBar appearance] setBarTintColor:myColor];e anche [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

Grazie, sai come rimuovere il gradiente bianco predefinito che viene dall'alto per renderlo un colore solido?
Jonathan Thurft

1
Con tintColoril gradiente rimarrà. Se non vuoi avere questo gradiente, devi sottoclassare la tua UINavigationBar OPPURE per creare un UIImage per l'aspetto.
Seb Thiebaud

59
su iOS 7 che non funzionava, ho dovuto usarenavigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentla proprietà non può essere impostata utilizzando UIAppearance in iOS 6 e iOS 7. Quindi [[UINavigationBar appearance] setTranslucent:NO]l'app si bloccherà con NSInvalidArgumentExceptionerrore. Usa [self.navigationController.navigationBar setTranslucent:NO]o deseleziona la trasparenza usando IB.
Sam

1
Versione rapida: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

Per cambiare il colore di sfondo e non la tinta, funzionerà la seguente parte di codice:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

3
Questa dovrebbe essere la risposta accettata, funziona perfettamente per iOS7.
joshuahornby10

Risposta corretta per iOS 7. Funziona per me.
LondonGuy

La traslucenza è il requisito per fare questo lavoro. Poiché la risposta accettata non lo include, questa dovrebbe essere la risposta accettata.
Tristan Warner-Smith

3
Giusto per chiarire, la risposta accettata è per AppDelegate e questo è per il View Controller.
Decano

@ Dean ha ragione. La risposta accettata avrà effetto per la nuova creazione UIViewControllers, mentre questa mostrerà gli effetti ogni volta che viene chiamata.
aramusss

18

Per farlo in iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];

15

Sintassi rapida:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

L'ho appena inserito in AppDelegate didFinishLaunchingWithOptions e persiste per tutta l'app


8

Swift :

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

6

Puoi farlo facilmente con Xcode 6.3.1. Seleziona la tua NavigationBar nella struttura del documento. Seleziona l'ispettore degli attributi. Deseleziona Traslucido. Imposta Bar Tint sul colore desiderato. Fatto!


Grazie, ho trovato molti riferimenti su come farlo in ObjC e swift, ma nessuno che menziona la sua disponibilità in IB
Nick

3

Come menzionano le altre risposte, puoi usare setTintColor:, ma vuoi un colore solido e non è possibile impostare il colore della tinta AFAIK.

La soluzione è creare un'immagine a livello di codice e impostare quell'immagine come immagine di sfondo per tutte le barre di navigazione tramite UIAppearance. Per quanto riguarda la dimensione dell'immagine, non sono sicuro se un'immagine da 1x1 pixel funzionerebbe o se hai bisogno della dimensione esatta della barra di navigazione.Controlla la seconda risposta di questa domanda per vedere come creare l'immagine.

Come consiglio, non mi piace "sovraccaricare" il delegato dell'app con questo tipo di cose. Quello che tendo a fare è creare una classe denominata AppearanceConfigurationcon un solo metodo pubblico in configureAppearancecui imposto tutte le cose di UIAppearance che desidero, quindi chiamo quel metodo dal delegato dell'app.


2

È possibile impostare il colore di sfondo UINavigation usando questo codice in qualsiasi controller di visualizzazione

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

In Swift 4.2 e Xcode 10.1

Puoi modificare il colore della barra di navigazione dal tuo AppDelegate direttamente all'intero progetto.

Nella didFinishLaunchingWithOptions launchOptions:scrittura di seguito alle righe di codice

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Qui

tintColor serve per impostare le immagini di sfondo come il pulsante Indietro e le immagini delle linee del menu ecc. (Vedi sotto l'immagine del menu a sinistra e a destra)

barTintColor è per il colore di sfondo della barra di navigazione

Se desideri impostare il colore della barra di navigazione del controller di visualizzazione specifico, scrivi sotto il codice in viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

inserisci qui la descrizione dell'immagine


-1

Il codice colore è il problema qui. Invece di utilizzare 195/255, utilizzare 0.7647 o 195.f / 255.f Il problema è che la conversione del float non funziona correttamente. Prova a utilizzare il valore float esatto.

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.