web-dev-qa-db-fra.com

UINavigationController changer la couleur de la teinte de la barre de navigation à l'échelle mondiale et par programme

Ce code peut changer la couleur d'un UINavigationBar partout dans l'application. Cependant, j'ai remarqué que cela ne change pas le UIColor du UINavigationBar utilisé parUINavigationController (le mien vient d'un UIStoryboard ).

UIColor* navBarColor = [UIColor colorWithRed:arc4random()%100/100.0 
                                       green:arc4random()%100/100.0 
                                        blue:arc4random()%100/100.0 
                                       alpha:1];
[[UINavigationBar appearance] setTintColor:navBarColor];

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setAlpha:0.7];

Existe-t-il un moyen d'accéder à l'objet appearance d'un UINavigationController's barre de navigation? Je sais comment définir les teintes des contrôleurs individuels, mais je veux avoir un contrôle global sur leur apparence.

Mise à jour: c'était mon erreur, le code change le UIColor de tous les UINavigationBars, mais il nécessite que le contrôleur de navigation racine soit couvert et découvert (par exemple en présentant un contrôleur de vue modale), puis il se redessinera avec le nouveau UIColors!

Je vous remercie!

20
Alex Stone

La solution complète qui change la couleur de la barre de navigation instantanément et se souvient de la préférence pour les lancements ultérieurs peut être trouvée ici: iPhone iOS comment redessiner UINavigationBar à la demande?

4
Alex Stone

Maintenant, dans iOS 8, nous pouvons définir la couleur de la teinte par ceci: -

self.navigationController.navigationBar.barTintColor = [UIColor redColor];
19
Ashish

Lorsque vous déclarez votre UINavigationController, essayez ceci:

UINavigationController *myNavController = 
[[UINavigationController alloc] initWithRootViewController:myRootViewController];
myNavController.navigationBar.tintColor = 
    [UIColor colorWithRed:arc4random() % 100 / 100.0f
                    green:arc4random() % 100 / 100.0f
                     blue:arc4random() % 100 / 100.0f
                    alpha:1.0f];
14
demon9733

Vous pouvez changer les couleurs des barres globalement en utilisant le proxy appearance:

NSDictionary *textTitleOptions = 
[NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
                                           UITextAttributeTextColor, 
                                           [UIColor whiteColor],  
                                           UITextAttributeTextShadowColor, nil];

[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
textTitleOptions = 
 [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
                                            UITextAttributeTextColor, nil];
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
[[UIToolbar appearance] setTintColor:[UIColor redColor]];
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];
13
Nilesh