Couleur du texte et de la flèche de la barre de navigation IOS 7

234

Je veux que l'arrière-plan de la barre de navigation soit noir et toutes les couleurs à l'intérieur soient blanches .

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 la couleur du texte du bouton de retour , la flèche et le bouton de la barre ont toujours la couleur bleue par défaut .
Comment changer ces couleurs comme sur l'image ci-dessous?

entrez la description de l'image ici

1110
la source
1
essayez dans AppDelegate if ([self.window respondsToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S
Fait intéressant, votre code a très bien fonctionné pour moi (je voulais juste changer la couleur du texte en blanc). Merci!
William T. Mallard,
Quelle est la couleur bleue que vous utilisez? À l'air cool!
ebi
@ebi certaines personnes n'aiment pas partager. Utilisez simplement un sélecteur de couleurs pour le sélectionner. Ou .... c'est
parti

Réponses:

753

Le comportement de certaines des propriétés de UINavigationBara changé depuis iOS 7 . Vous pouvez voir dans l'image ci-dessous:

entrez la description de l'image ici


Deux beaux liens que je voudrais partager avec vous. Pour plus de détails, vous pouvez consulter ces liens:

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

La documentation Apple pour barTintColor indique:

Cette couleur est rendue translucide par défaut, sauf si vous définissez la propriété translucide sur NO.

Exemple de code:

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;
Bhavin
la source
J'ai essayé: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 vert: 12.0 / 255.0 bleu: 19.0 / 255.0 alpha: 1.0]; Mais tout est encore bleu.
1110
2
Je l'ai lu avant mais ce changement ne fait que du texte mais pas et de la flèche. Il est toujours bleu :(
1110
1
@ 1110: Jetez un œil à: Utilisation de la couleur de teinte
Bhavin
2
@Chelsea: Et cette ligne? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin
4
N'oubliez pas que vous pouvez modifier la teinte de l'application entière dans appDelegate: [[UINavigationBar apparence] setTintColor: [UIColor blackColor]];
simon_smiley
85

entrez la description de l'image ici

Celui-ci m'a pris environ une demi-journée pour comprendre, mais c'est ce qui a fonctionné pour moi. À l'intérieur du rootViewController qui initialise le navigationController, j'ai mis ce code dans ma 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 article complet à ce sujet ici

John Riselvato
la source
1
Si vous rencontrez des problèmes pour changer la couleur de la flèche arrière, cet extrait de code corrigera le problème. Au minimum, vous aurez besoin de la dernière ligne de code ajoutée à votre rootViewController réel.
russes
Ouais, John. J'ai également perdu environ une heure hier. Un problème (gros problème) était que les documents étaient terribles en soulignant tous les attributs possibles. Une idée où ils pourraient être répertoriés? TY.
Alex Zavatone
Merci @john Cela chevauche ma couleur personnalisée, pouvez-vous m'expliquer pourquoi?
Vaibhav Limbani
Je pense que vous devriez créer une nouvelle question. Je ne pourrais pas vous dire pourquoi à moins de voir votre code et ce que vous faites. @MacGeek
John Riselvato
3
Merci, cela a fonctionné :). Mais UITextAttributeTextColor est déconseillé dans iOS 7, vous devez maintenant utiliser NSForegroundColorAttributeName
YYamil
37

Swift3, ios 10

Pour attribuer globalement la couleur, dans 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
lifeisfoo
la source
21

La réponse de Vin a très 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;
benhorgen
la source
Je ne savais pas que vous pouviez définir SetTitleTextAttributes comme vous l'avez fait.
Brad Moore
12

Swift / iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes
LondonGuy
la source
3
let textAttributes = NSMutableDictionary (capacité: 1) est maintenant l'appel correct pour l'initialisation NSMutableDictionary.
juliensaad
12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Abo3atef
la source
1
J'aime cette approche car vous pouvez définir cela dans AppDelegate lui-même, et il utilise le proxy d'apparence.
Niyog Ray
8

Pour changer la couleur du UINavigationBartitre de la bonne façon, utilisez ce code:

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

UITextAttributeTextColorest déconseillé dans la dernière version d'ios 7. Utilisez NSForegroundColorAttributeNameplutôt.

aZtraL-EnForceR
la source
5

Si vous cherchez à changer la taille du texte du titre et la couleur du texte, vous devez changer le NSDictionary titleTextAttributes , pour 2 de ses objets:

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

Je pense que les réponses précédentes sont correctes, c'est une autre façon de faire la même chose. Je le partage ici avec d'autres au cas où cela deviendrait utile pour quelqu'un. Voici comment vous pouvez changer la couleur du texte / titre de la barre de navigation dans 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;
grepit
la source
1

Il semble que les Accessibilitycommandes de la iOS Settingspriorité remplacent à peu près tout ce que vous essayez de faire en termes de couleurs aux boutons de la barre de navigation. Assurez-vous que tous les paramètres sont définis sur les positions par défaut ( désactivez l' augmentation du contraste, le texte en gras , les formes des boutons, etc.), sinon vous ne verrez rien changer. Une fois que je l'ai fait, tout le code de changement de couleur a commencé à fonctionner comme prévu. Vous n'aurez peut-être pas besoin de les désactiver tous, mais je ne l'ai pas poursuivi.

strangeluck
la source
Exactement ce qui m'est arrivé. Je n'ai pas pu modifier la couleur de teinte d'un élément de bouton de barre lorsque "Texte en gras" était activé. Ce n'est pas bon. Maintenant, je vais devoir utiliser un graphique à la place :-(
Ken
0

Swift 5 / iOS 13

Pour changer la couleur du titre dans le contrôleur:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Mahdi Moqadasi
la source