Comment changer la couleur de la barre de navigation dans iOS 7?
En gros, je veux réaliser quelque chose comme la barre de navigation de Twitter (Twitter mis à jour pour iOS7
). J'ai intégré une barre de navigation au sommet d'un view controller
. Tout ce que je veux, c'est changer la couleur de la barre de navigation en bleu clair en même temps que la barre des services en haut. Je n'arrive pas à trouver une option dans mon storyboard
.
Le comportement de tintColor
pour les barres a changé dans iOS 7.0. Cela n'affecte plus le fond de la barre.
De la documentation:
barTintColor Référence de classe
La couleur de teinte à appliquer à l'arrière-plan de la barre de navigation.
@property(nonatomic, retain) UIColor *barTintColor
Discussion
Cette couleur est rendue translucide par défaut, sauf si vous définissez la propriété translucent sur NO
.
Disponibilité
Disponible dans iOS 7.0 et versions ultérieures.
Déclaré dans
INavigationBar.h
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
// iOS 7.0 or later
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
}else {
// iOS 6.1 or earlier
self.navigationController.navigationBar.tintColor = [UIColor redColor];
}
Nous pouvons également l'utiliser pour vérifier la version iOS mentionnée dans Guide de la transition de l'interface utilisateur iOS 7
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
// iOS 6.1 or earlier
self.navigationController.navigationBar.tintColor = [UIColor redColor];
} else {
// iOS 7.0 or later
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
}
EDIT Utilisation de xib
Il est très facile de faire ce que la question initiale vous avait demandé - pour obtenir l'aspect de l'ancienne barre de navigation de Twitter, fond bleu avec du texte en blanc - en utilisant simplement Interface Builder dans Xcode.
Cela devrait vous donner ce que vous voulez. Voici une capture d'écran qui permettrait de voir plus facilement où apporter les modifications.
Notez que le fait de modifier uniquement la teinte des barres ne modifie pas la couleur du texte dans la barre de navigation ou la barre d'état. Le style doit également être changé.
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;
// *barTintColor* sets the background color
// *tintColor* sets the buttons color
Dans une application basée sur la navigation, vous pouvez insérer le code dans AppDelegate. Un code plus détaillé pourrait être:
// Navigation bar appearance (background and title)
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];
[[UINavigationBar appearance] setTintColor:[UIColor barColor]];
// Navigation bar buttons appearance
[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];
Dans viewDidLoad
, définissez:
self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
Changez (blueColor
) en la couleur de votre choix.
Pour Swift changer la couleur de la barre de navigation:
self.navigationController?.navigationBar.barTintColor = UIColor.red
changer la police du titre, la taille, la couleur:
self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
NSAttributedString.Key.foregroundColor : UIColor.white,
NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
]
Si vous souhaitez utiliser un code hexadécimal, voici la meilleure façon de le faire.
Commencez par définir ceci en haut de votre classe:
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
Ensuite, dans l'application didFinishLaunchingWithOptions, mettez ceci:
[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];
Mettez votre code hexadécimal à la place du 00b0f0.
Dans iOS 7, vous devez utiliser la propriété -barTintColor:
navController.navigationBar.barTintColor = [UIColor barColor];
Si vous devez prendre en charge ios6 et ios7, vous obtenez ce bleu clair en utilisant ceci dans votre IViewController:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
self.navigationController.navigationBar.translucent = NO;
}else{
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
}
}
C'est en fait plus facile que les réponses que j'ai vues ici:
1) Just make sure you select the navigation bar on the Navigation control.
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).
J'espère que cela aide quelqu'un. Je n'ai pas aimé les réponses que j'ai vues. J'aime garder mon code le plus propre possible. Ne dites pas que ce n'est pas correct de le faire par programme, mais il y a des gens comme moi ... c'est pour vous les gars.
Pour que le code de Rajneesh071 soit complet, vous pouvez également définir la couleur du titre de la barre de navigation (et la police de caractères, si vous le souhaitez), car le comportement par défaut est passé de iOS 6 à 7:
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.translucent = NO;
NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
[textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}
Ajoutez seulement ce code dans votre ViewContorller
o dans votre AppDelegate
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
//This is For iOS6
[self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
//This is For iOS7
[self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.tintColor = [UIColor redColor];
//change the nav bar colour
self.navigationController.view.backgroundColor = [UIColor redColor];
//change the background colour
self.navigationController.navigationBar.translucent = NO;
}
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:(BOOL)animated];
self.navigationController.navigationBar.tintColor = [UIColor redColor];
//change the nav bar colour
self.navigationController.view.backgroundColor = [UIColor redColor];
//change the background colour
self.navigationController.navigationBar.translucent = NO;
}
Dans une application de navigation, vous pouvez changer de couleur
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
self.navigationController.navigationBar.translucent = NO;
} else {
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
if (_kisiOS7)
{
[[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
}
else
{
[[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
[[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Pour la couleur:
[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];
Pour l'image
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
Cette question et ces réponses sont utiles. Avec eux, je pouvais définir la couleur désirée en bleu foncé navigationBar
avec le titre en blanc et le texte du bouton.
Mais je devais aussi changer l'horloge, la porteuse, la force du signal, etc. en blanc. Le noir ne contraste pas assez avec le bleu foncé.
J'ai peut-être oublié cette solution dans l'une des réponses précédentes, mais j'ai pu effectuer cette modification en ajoutant cette ligne à mon niveau supérieur viewController
's viewDidLoad
:
[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];