2010-08-25 7 views
7

Y a-t-il un moyen facile de changer la couleur de fond de l'élément de navigation au-dessus d'une vue? J'ai une application basée sur la navigation et je veux seulement qu'une vue obtienne une autre couleur de fond. J'ai créé les vues principalement avec IB. J'ai trouvé la solution (non testé) suivante:modifier la couleur de fond de l'élément de navigation (barre)

float r=10; 
float g=55; 
float b=130; 
float a=0; 

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 120, 30)]; 
[label setBackgroundColor:[UIColor colorWithRed:r/255.f 
              green:g/255.f 
              blue:b/255.f  
              alpha:a/255.f];]; 
[self.navigationController.navigationBar.topItem setTitleView:label]; 
[label release]; 

Y at-il un moyen plus facile comme

[navigationController.navigationBar setBackgroundColor:blueColor] 

Ou puis-je faire avec IB (mais sans avoir la même couleur dans chaque point de vue)?

Merci beaucoup d'avance!

Vive

Répondre

17

Vous pouvez utiliser:

[navigationController.navigationBar setTintColor:[UIColor redColor]; //Red as an example. 

Ceci teinter la couleur de la barre de navigation et tous ses boutons à une couleur spécifique, dans ce cas rouge. Cette propriété peut également être définie dans Interface Builder.

Et si vous souhaitiez le personnaliser davantage, vous pouvez définir l'arrière-plan du UINavigationBar sur une image en le subdivisant. Comme si ...

Fichier d'en-tête.

#import <UIKit/UIKit.h> 

@interface UINavigationBar (CustomImage) 

@end 

fichier implementaion.

#import "CustomNavigationBar.h" 

@implementation UINavigationBar (CustomImage) 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 

{ 
    if([self isMemberOfClass: [UINavigationBar class]]){ 
     UIImage *image = [UIImage imageNamed:@"bar.png"]; 
     CGContextClip(ctx); 
     CGContextTranslateCTM(ctx, 0, image.size.height); 
     CGContextScaleCTM(ctx, 1.0, -1.0); 
     CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
    }else{ 
     [super drawLayer:layer inContext:ctx]; 
    } 

} 

@end 

Ensuite, dans Interface Builder, définissez la classe de vous UINavigationBar (dans ce cas) CustomNavigationBar sous l'onglet Identité.

+1

Merci! La première solution est actuellement suffisante. J'ai utilisé [[[auto navigationController] navigationBar] setTintColor: [UIColor colorWithRed: 255/255.f vert: 0/255.f bleu: 0/255.f alpha: 0/255.f]]; Mais le second sera peut-être dans la version productive de mon application;) Encore une question: Dans mes autres vues, je n'ai pas d'objet de barre de navigation dans la plume. Est-il possible de définir la couleur de la teinte dans IB? Ou est le seul moyen de le coder en dur? – testing

+0

Malheureusement, vous ne pouvez définir que la couleur de la barre de navigation dans votre vue principale dans IB. Si vous voulez changer la teinte entre les vues, vous devrez le coder en dur. – Joshua

+0

OK, ça n'a pas d'importance. Je voulais seulement savoir ça. Merci encore! – testing

1

Vous pouvez utiliser navigationController.navigationBar.tintColor;

1

@jerry

couleur de teinte

ne sera pas supporté aux coordonnées RGB

2

[[UINavigationBar apparence] setTintColor: [UIColor colorWithRed: 107,0/256,0 vert: 145,0/256,0 bleu: 35,0/256,0 alpha: 1,0 ]]; Va changer la couleur de la barre de navigation de l'application entière. Il suffit de le placer dans la méthode didFinishLauncing d'Appdelegate.

3

Essayez ceci dans Interface Builder sur votre UINavigationController.

enter image description here

+0

Très utile. Cela a fonctionné pour moi .. –

Questions connexes