235 votes

Couleur du texte et des flèches de la barre de navigation d'iOS 7

Je veux définir l'arrière-plan de la barre de navigation comme étant noir et toutes les couleurs à l'intérieur pour être blanc .

J'ai donc utilisé ce code :

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

Mais le bouton arrière couleur du texte , flèche et bouton de barre ont encore des défauts couleur bleue .
Comment changer ces couleurs comme sur l'image ci-dessous ?

navigation bar

1 votes

Try in AppDelegate if ([self.window respondsToSelector:@selector(setTintColor :)]) self.window.tintColor = [UIColor whiteColor] ;

3 votes

0 votes

Il est intéressant de noter que votre code a bien fonctionné pour moi (je voulais juste changer la couleur du texte en blanc). Merci !

755voto

Bhavin Points 12613

Le comportement de certaines des propriétés de UINavigationBar est passé de iOS 7 . Vous pouvez voir dans l'image ci-dessous :

enter image description here


Deux liens magnifiques que j'aimerais partager avec vous. Pour plus de détails, vous pouvez passer par ces liens :

  1. Guide de transition de l'interface utilisateur d'iOS 7 .
  2. Comment mettre à jour votre application pour iOS 7 .

Documentation Apple pour barTintColor dit :

Cette couleur est rendue translucide par défaut, à moins que vous ne donniez la valeur NO à la propriété translucide. propriété translucide à NO.

Code échantillon :

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

0 votes

J'ai essayé : self.nav.navigationBar.tintColor = [UIColor whiteColor] ; self.nav.navigationBar.barTintColor = [UIColor colorWithRed:6.0/255.0 green:12.0/255.0 blue:19.0/255.0 alpha:1.0] ; Mais tout est toujours bleu.

2 votes

Je l'ai lu avant mais ce changement ne concerne que le texte mais pas la flèche. C'est toujours bleu :(

1 votes

@1110 : Jetez un coup d'oeil à : Utilisation de la couleur de teinte

85voto

John Riselvato Points 5217

enter image description here

Celui-ci m'a pris environ une demi-journée à comprendre, mais voici ce qui a fonctionné pour moi. Dans le rootViewController qui initialise le navigationController, j'ai mis ce code dans la méthode 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]];

Mon billet complet sur ce sujet ici

1 votes

Si vous avez des problèmes pour changer la couleur de la flèche de retour, cet extrait résoudra le problème. Au minimum, vous aurez besoin de la dernière ligne de code ajoutée à votre rootViewController actuel.

0 votes

Oui, John. J'ai perdu environ une heure sur ce sujet hier aussi. Un problème (un gros problème) était que la documentation n'indiquait pas du tout tous les attributs possibles. Une idée de l'endroit où ils pourraient être listés ? TY.

0 votes

Merci @john Il chevauche ma couleur personnalisée, pouvez-vous m'expliquer pourquoi ?

21voto

benhorgen Points 240

La réponse de Vin a bien fonctionné pour moi. Voici la même solution pour les développeurs C# utilisant 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;

0 votes

Je ne savais pas que vous pouviez définir SetTitleTextAttributes comme vous l'avez fait.

12voto

LondonGuy Points 2311

Swift / iOS8

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

3 votes

Let textAttributes = NSMutableDictionary(capacity:1) est maintenant l'appel correct pour l'initialisation du NSMutableDictionary.

12voto

Abo3atef Points 166
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

1 votes

J'aime cette approche car vous pouvez la définir dans AppDelegate lui-même, et elle utilise le proxy Appearance.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X