Tengo el código que cambia el color de la barra de navegación utilizando el atributo de apariencia. Me gustaría que el cambio en el color de la navbar a ser visibles inmediatamente. Sin embargo, no puedo encontrar una llamada correcta a hacer para volver a dibujar la barra de navegación. En la actualidad es los cambios de color cuando presiono un modal de navegación controlador, cubriendo así la navbar.

Esto no funciona:

AppDelegate* appDelegate = ((AppDelegate*)[[UIApplication sharedApplication] delegate]);

    [appDelegate.window setNeedsDisplay];

Yo también traté de preguntar varias instancias de controlador de navegación para volver a trazar sus puntos de vista, que no trabajo.

¿Cuál es la manera correcta de pedir la UINavigationBar a dibujarse en la demanda?

Gracias!

ACTUALIZACIÓN: Aquí está el código que funciona!

    - (UIColor *) colorOfPoint:(CGPoint)point
{
unsigned char pixel[4] = {0};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextTranslateCTM(context, -point.x, -point.y);
[self.view.layer renderInContext:context];
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
NSLog(@"pixel: %d %d %d %d", pixel[0], pixel[1], pixel[2], pixel[3]);
float red = pixel[0]/255.0;
float green = pixel[1]/255.0;
float blue = pixel[2]/255.0;
float alpha = pixel[3]/255.0;
UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
[[NSUserDefaults standardUserDefaults] setFloat:red forKey:@"navBarRed"];
[[NSUserDefaults standardUserDefaults] setFloat:green forKey:@"navBarGreen"];
[[NSUserDefaults standardUserDefaults] setFloat:blue forKey:@"navBarBlue"];    
[[NSUserDefaults standardUserDefaults] setFloat:alpha forKey:@"navBarAlpha"];
return color;
}
- (IBAction)handleTapFrom:(id)sender {
if([sender isKindOfClass:[UITapGestureRecognizer class]])
{
CGPoint location = [tapGestureRecognizer locationInView:self.view];
//remember color preferences
UIColor* navbarColor =  [self colorOfPoint:location];
selectColorView.center = location;
//UPDATE THE NAVBAR COLOR CODE HERE
//this does not update immediately 
float navBarRed = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarRed"];
float navBarGreen = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarGreen"];    
float navBarBlue = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarBlue"];
float navBarAlpha = [[NSUserDefaults standardUserDefaults] floatForKey:@"navBarAlpha"];
UIColor* navBarColor =  [UIColor colorWithRed:navBarRed green:navBarGreen blue:navBarBlue alpha:navBarAlpha];
//set the color of all newly created navbars
[[UINavigationBar appearance] setTintColor:navBarColor];  
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setAlpha:0.7];
//update the toolbar appearance
[[UIToolbar appearance] setTintColor:navBarColor];
//set the color of the current navbar, displaying immediate change
self.navigationController.navigationBar.tintColor = navbarColor;
}
}
  • ¿Has probado [myNavigationController.navigationBar setNeedsDisplay];
  • Cuando desee volver a dibujar la barra de navegación??
  • Es que incluso la navegación derecha o controlador es la empujó del controlador de la barra de navegación se establece? Puede publicar su código donde puede configurar la barra de navegación de color?—que sería más pertinente.
  • Mi raíz de navegación controlador viene a partir de un guión gráfico, el código sugerido no funciona para eso.
InformationsquelleAutor Alex Stone | 2012-02-28

1 Comentario

  1. 16

    No puede establecer la tintColor de la NavigationBar? Que deben trabajar:

    self.navigationController.navigationBar.tintColor = [UIColor redColor];

Dejar respuesta

Please enter your comment!
Please enter your name here