Objective-C: Imagen de fondo y el título en la barra de navegación
-
28-09-2019 - |
Pregunta
En necesita una imagen de fondo y un título en mi barra de navegación. Para la imagen que escribo una categoría:
@implementation UINavigationBar(MyNavigationBar)
- (void)setBackgroundImage {
UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"navBarBackgrd.png"]];
[self addSubview: aTabBarBackground];
[self sendSubviewToBack: aTabBarBackground];
[aTabBarBackground release];
}
@end
Me llamar a esta categoría en mi AppDelegate y tienen imágenes de fondo en toda la aplicación:
[navigationController.navigationBar setBackgroundImage];
Cada ViewController tiene un título:
[self setTitle:@"MyTitle"];
Sin embargo, después de ajustar la imagen de fondo, tengo un problema con el título.
En la primera vista de cada obra, veo la imagen de fondo y el título :-) Pero en la siguiente vista, el título desaparece. Sólo la imagen de fondo es visible. Tal vez el título está en la imagen?
Técnicamente es posible mostrar ambos. Con este truco funciona:
-
Ocultar barra de navegación de abrir antes de la próxima ViewController:
[self.navigationController setNavigationBarHidden: YES];
-
Mostrar la barra de navegación en la siguiente ViewController:
[self.navigationController setNavigationBarHidden: NO];
Ahora, la imagen y el título son visibles, pero esta solución no es la mejor; -)
Solución
Lo tengo!
@implementation UINavigationBar(MyNavigationBar)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navBarBackgrd.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Otros consejos
Después de iOS5 Usted debe hacer esto, por ejemplo, en AppDelegate
UIImage *img = [[UIImage imageNamed:@"image.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:0 green: 0 blue:0 alpha:1]];