web-dev-qa-db-fra.com

Comment changer la couleur de la barre de navigation dans iOS 7?

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.

206
Patricio Guerra

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

Code

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

enter image description here

316
Rajneesh071

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.

  • À l’aide du plan du document, sélectionnez votre barre de navigation.
  • Dans l'inspecteur d'attributs, dans le groupe Barre de navigation, modifiez le style de Noir par défaut. Cela change la couleur d'arrière-plan des barres de navigation et d'état en noir et leur texte en blanc. Ainsi, la batterie, les autres icônes et le texte de la barre d'état apparaissent en blanc lorsque l'application est en cours d'exécution.
  • Dans le même groupe de barres de navigation, modifiez la teinte des barres à la couleur de votre choix.
  • Si la barre de navigation contient des éléments Bouton de barre, ceux-ci continueront d'afficher leur texte dans la couleur bleue par défaut. Dans l'inspecteur d'attributs, groupe de vues, changez la teinte en couleur blanche.

Cela devrait vous donner ce que vous voulez. Voici une capture d'écran qui permettrait de voir plus facilement où apporter les modifications.

Where to make the necessary changes, including the result in iOS Simulator

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é.

124
alondono
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color
72
pNre

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];
44
RFG

Dans viewDidLoad, définissez:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Changez (blueColor) en la couleur de votre choix.

23
zeezoo

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)!
    ]
15
William Hu

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.

12
Kyle Greenlaw

Dans iOS 7, vous devez utiliser la propriété -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];
11
RFG

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];
    }
}
11
bbaassssiiee

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. Changing color of the navigation bar

9
pqsk

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];
}
4
CodeBrew

Ajoutez seulement ce code dans votre ViewContorllero 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]];
}
4
Darshan Kunjadiya
//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;
}
3
Dashony

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];
}
3
Salim
#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]];
    }
3
Mubin Shaikh
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
2
Gaurav Gilani

Pour la couleur:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Pour l'image

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
2
user4952581

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];
2
John