2010-08-25 48 views
7

¿hay alguna manera fácil de cambiar el color de fondo del elemento de navegación en la parte superior de una vista? Tengo una aplicación basada en la navegación y solo quiero que una vista tenga otro color de fondo. Creé las vistas principalmente con IB. He encontrado la siguiente solución (no probado):cambiar el color de fondo del elemento de navegación (barra)

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

¿Hay una manera más fácil como

[navigationController.navigationBar setBackgroundColor:blueColor] 

O puedo hacerlo con IB (pero sin tener el mismo color en todas las vistas)?

¡Muchas gracias de antemano!

Saludos

Respuesta

17

que puede usar:

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

Esto teñir el color de la barra de navegación y todos sus botones a un color específico, en este caso de color rojo. Esta propiedad también se puede configurar en Interface Builder.

Y si desea personalizarlo aún más, puede establecer el fondo del UINavigationBar en una imagen subclasificándolo. Al igual que ...

Archivo de encabezado.

#import <UIKit/UIKit.h> 

@interface UINavigationBar (CustomImage) 

@end 

implementaion Archivo.

#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 

Luego, en el Interface Builder conjunto de la clase que UINavigationBar a (en este caso) CustomNavigationBar bajo la etiqueta de identidad.

+1

Thanks! La primera solución es actualmente suficiente. Usé [[[self navigationController] navigationBar] setTintColor: [UIColor colorWithRed: 255/255.f verde: 0/255.f azul: 0/255.f alpha: 0/255.f]]; Pero el segundo será quizás en la versión productiva de mi aplicación;) Todavía una pregunta: En mis otras vistas no tengo un objeto Barra de navegación en el plumín. ¿Existe la posibilidad de establecer el color del tinte en IB? ¿O es la única forma de codificarlo? – testing

+0

Desafortunadamente, solo puede establecer el color del tinte de la barra de navegación en su vista principal en IB. Si desea cambiar el matiz entre las vistas, tendrá que codificarlo. – Joshua

+0

OK, eso no importa. Solo quería saber eso. ¡Gracias de nuevo! – testing

1

Puede utilizar navigationController.navigationBar.tintColor;

1

@jerry

color de la tinta no es compatible con el RGB Coordenadas

2

[[UINavigationBar apariencia] setTintColor: [UIColor colorWithRed: 107,0/256,0 verde: 145.0/256.0 azul: 35,0/256,0 alpha: 1,0 ]]; Cambiará el color de la barra de navegación de toda la aplicación.

Simplemente colóquelo en el método didFinishLauncing de Appdelegate.

3

Pruebe esto en Interface Builder en su UINavigationController.

enter image description here

+0

Muy útil. Esto funcionó para mí ... –

Cuestiones relacionadas