2012-04-24 18 views

Respuesta

5

yo creo que hay una subclase UINavigationBar y anular -(void)drawRect:(CGRect)rect:

UIColor *colorFlat = /* any UIColor*/ 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetFillColorWithColor(context, [colorFlat CGColor]); 
CGContextFillRect(context, rect); 
+0

Gracias. Funciona de maravilla. Para configurar los colores de los botones, cambié el color del tinte de la barra de navegación y obtienen el color del tinte. Justo como esperaba. – MartinHN

+0

¿Sabe si es posible hacerlo a través del proxy de aparición? '[[UINavigationBar apariencia] .....];' – MartinHN

+0

No sé, utilizo este código en un proyecto con iOS 4.2 cuando la apariencia no estaba disponible –

-4

Crear una CustomUIViewController que se extiende UIViewController y anular viewDidLoad a algo como esto:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.view.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0]; 
} 

Después de eso, utilice su CustomUIViewController en sus controladores.

Credits

+0

¿No es posible prescindir de una imagen? – MartinHN

+0

Shure, disculpe el error, intente utilizar: [UIColor colorWithRed: 0.0 verde: 0.0 azul: 1.0 alfa: 1.0] – kcho0

+0

Sin suerte. ¿No debería establecer el fondo en la barra de navegación? p.ej. 'self.navigationController.navigationBar.backgroundColor'? Lo cual tampoco funciona :) – MartinHN

46

El siguiente código también se traduce en color sólido de la barra de navegación:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundColor:[UIColor redColor]]; 
+2

Asegúrese de establecer también el color del tinte o sus botones en la barra de navegación no obtendrán el color: [[UINavigationBar apariencia] setTintColor: [UIColor redColor]]; –

+0

¿Dónde haces esto? Intento hacerlo en viewDidLoad del controlador de vista con la barra de navegación y no parece tener efecto. ¿Necesita hacerse en algún momento antes? Tengo un guión gráfico que parece estar anulándolo. – David

+0

David, tiene que hacerse antes de presentar la vista. La configuración de "apariencia" no actualiza las vistas visibles. Si desea establecer esto globalmente, el mejor lugar para hacerlo sería en la aplicación: didFinishLaunchingWithOptions :. – Lubiluk

0

he utilizado para anular método drawRect y color de relleno; pero después de la actualización iOS7 causa algunos problemas en UINavigationBar. Si escribe su propio método drawrect, incluso si llama a [super drawRect], cambia la dimensión de la barra y termina con una barra de navegación con 44 píxeles de altura. La barra de estado se deja en blanco.

Para obtener un sólido navigationbar color, utilicé una imagen como imagen de fondo (cualquier imagen de color sólido pequeño va a hacer, ya que está estirando ella) y añadió esta líneas dentro del método initWithFrame de la subclase UINavigationBar:

[self setBackgroundColor:[UIColor clearColor]]  
[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"bgimage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault]; 
0

El siguiente código funcionó para mí:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]]; 
self.navigationController.navigationBar.translucent = NO; 
[self.navigationController.navigationBar setShadowImage:[UIImage new]]; 
Cuestiones relacionadas