Comment changer la couleur d'arrière-plan de UINavigationBar à partir de AppDelegate

90

Je sais comment changer le UINavigationBar image de fond en faisant

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

et je sais comment régler la barre sur des couleurs différentes dans chaque Views..... Maintenant, je veux changer la couleur d'arrière-plan sans utiliser une image à une couleur unie du app delegate. Je ne veux pas le paramétrer à chaque fois à partir de chaque vue et je ne veux pas écrire de fichier CGRect.

J'ai essayé [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];mais je ne fonctionne pas et je ne trouve nulle part de code qui fonctionne dans le délégué d'application.

Quelqu'un pourrait-il s'il vous plaît me diriger dans la bonne direction?

Jonathan Thurft
la source

Réponses:

202

Vous pouvez utiliser [[UINavigationBar appearance] setTintColor:myColor];

Depuis iOS 7, vous devez définir [[UINavigationBar appearance] setBarTintColor:myColor];et aussi [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];
Seb Thiebaud
la source
Merci, savez-vous comment supprimer le dégradé blanc par défaut qui vient du haut pour en faire une couleur unie?
Jonathan Thurft
1
Avec tintColorle dégradé restera. Si vous ne souhaitez pas avoir ce dégradé, vous devez sous-classer votre UINavigationBar OU créer une UIImage pour l'apparence.
Seb Thiebaud
59
sur iOS 7 qui ne fonctionnait pas, je devais utilisernavigationBar.barTintColor = myColor;
Juan de la Torre
4
translucentLa propriété ne peut tout simplement pas être définie à l'aide de UIAppearance dans iOS 6 et iOS 7. Donc [[UINavigationBar appearance] setTranslucent:NO], l'application plantera avec une NSInvalidArgumentExceptionerreur. Utilisez [self.navigationController.navigationBar setTranslucent:NO]ou désélectionnez la transparence à l'aide d'IB.
Sam
1
Version Swift: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034
103

Pour changer la couleur d'arrière-plan et non la teinte, le morceau de code suivant fonctionnera:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];
LJ1
la source
3
Cela devrait être la réponse acceptée, fonctionne parfaitement pour iOS7.
joshuahornby10
Bonne réponse pour iOS 7. Travailler pour moi.
LondonGuy
La translucidité est la condition requise pour faire ce travail. Comme la réponse acceptée n'inclut pas cela, cela devrait être la réponse acceptée.
Tristan Warner-Smith
3
Juste pour clarifier, la réponse acceptée est pour AppDelegate et c'est pour dans View Controller.
Dean
@Dean a raison. La réponse acceptée prendra effet pour les nouveautés UIViewControllers, tandis que celle-ci affichera des effets à chaque appel.
aramusss
18

Pour faire cela dans iOS 7:

[[UINavigationBar appearance] setBarTintColor:myColor];
Lit superposé Lasse
la source
15

Syntaxe Swift:

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

Je viens de mettre cela dans AppDelegate didFinishLaunchingWithOptions et cela persiste dans toute l'application

Dustin Williams
la source
8

Swift :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false
Hemang
la source
6

Vous pouvez facilement le faire avec Xcode 6.3.1. Sélectionnez votre NavigationBar dans la structure du document. Sélectionnez l'inspecteur d'attributs. Décochez Translucide. Réglez Bar Tint sur la couleur souhaitée. Terminé!

ronm333
la source
Merci, j'ai trouvé beaucoup de références sur la façon de faire cela dans ObjC et swift, mais personne ne mentionne qu'il est disponible dans IB
Nick
3

Comme le mentionnent les autres réponses, vous pouvez utiliser setTintColor: , mais vous voulez une couleur unie et il n'est pas possible de définir la couleur de teinte AFAIK.

La solution consiste à créer une image par programme et à définir cette image comme image d'arrière-plan pour toutes les barres de navigation via UIAppearance. À propos de la taille de l'image, je ne sais pas si une image de 1x1 pixel fonctionnerait ou si vous avez besoin de la taille exacte de la barre de navigation. cette question pour voir comment créer l'image.

En guise de conseil, je n'aime pas «surcharger» le délégué d'application avec ce type de choses. Ce que j'ai tendance à faire est de créer une classe nommée AppearanceConfigurationavec une seule méthode publique dans configureAppearancelaquelle je définis tous les éléments UIAppearance que je veux, puis j'appelle cette méthode à partir du délégué d'application.

e1985
la source
2

Vous pouvez définir la couleur d'arrière-plan UINavigation en utilisant ce code dans n'importe quel contrôleur de vue

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

Dans Swift 4.2 et Xcode 10.1

Vous pouvez modifier la couleur de votre barre de navigation depuis votre AppDelegate directement vers l'ensemble de votre projet.

En didFinishLaunchingWithOptions launchOptions:écrivez ci-dessous aux lignes de code

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

Ici

tintColor sert à définir les images d'arrière-plan telles que les images du bouton de retour et des lignes de menu, etc. (voir l'image du menu gauche et droite ci-dessous)

barTintColor est pour la couleur d'arrière-plan de la barre de navigation

Si vous souhaitez définir la couleur de la barre de navigation du contrôleur de vue spécifique, écrivez le code ci-dessous dans 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

entrez la description de l'image ici

iOS
la source
-1

Le code couleur est le problème ici. Au lieu d'utiliser 195/255, utilisez 0.7647 ou 195.f / 255.f Le problème est que la conversion du flottant ne fonctionne pas correctement. Essayez d'utiliser la valeur flottante exacte.

ganka
la source