web-dev-qa-db-fra.com

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

Je souhaite définir l'arrière-plan de la barre de navigation sur noir et toutes les couleurs à l'intérieur de celle-ci sur blanc.

Donc, j'ai 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 précédent couleur du texte, flèche et bouton en forme de barre ont toujours la valeur par défaut couleur bleue.
Comment changer ces couleurs comme sur l'image ci-dessous?

enter image description here

233
1110

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

enter image description here


Deux beaux liens 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 iOS 7 .
  2. Comment mettre à jour votre application pour iOS 7 .

Documentation Apple pour barTintColor dit:

Cette couleur est rendue translucide par défaut, sauf si vous définissez la propriété translucent 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;
752
Bhavin

enter image description here

Celui-ci m'a pris environ une demi-journée pour comprendre, mais c'est ce qui a fonctionné pour moi. Dans le rootViewController qui initialise le navigationController, j'ai placé 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 post complet sur ce ici

85
John Riselvato

Swift3, ios 1

Pour affecter 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
37
lifeisfoo

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;
21
benhorgen
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
12
Abo3atef

Swift/iOS8

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

Pour changer la couleur de UINavigationBar title correctement, utilisez ce code:

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

UITextAttributeTextColor est obsolète dans la dernière version de ios 7. Utilisez NSForegroundColorAttributeName à la place.

8
aZtraL-EnForceR

Si vous souhaitez modifier le titre taille du texte et le couleur du texte, vous devez modifier 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];
5
OhadM

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 modifier 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;
2
grepit

Il semble que les commandes Accessibility du iOS Settings remplacent pratiquement tout ce que vous essayez de faire en termes de couleur pour les boutons de la barre de navigation. Assurez-vous que tous les paramètres sont réglés sur les positions par défaut (régler le contraste, texte en gras, les formes des boutons, etc. sur Off), 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 éteindre tous, mais je ne poursuivis pas plus loin.

1
strangeluck