Objective-C: l'image d'arrière-plan et le titre dans la barre de navigation
-
28-09-2019 - |
Question
Dans besoin d'une image de fond et un titre dans ma barre de navigation. Pour l'image que j'écris une catégorie:
@implementation UINavigationBar(MyNavigationBar)
- (void)setBackgroundImage {
UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"navBarBackgrd.png"]];
[self addSubview: aTabBarBackground];
[self sendSubviewToBack: aTabBarBackground];
[aTabBarBackground release];
}
@end
J'appelle cette catégorie dans mon AppDelegate et avoir des images d'arrière-plan dans l'ensemble de l'application:
[navigationController.navigationBar setBackgroundImage];
Chaque ViewController a un titre:
[self setTitle:@"MyTitle"];
Mais après avoir défini l'image d'arrière-plan, j'ai un problème avec le titre.
Dans la première vue tous les travaux, je vois l'image d'arrière-plan et le titre :-) Mais dans la vue suivante, le titre disparaît. Seule l'image d'arrière-plan est visible. Peut-être que le titre est sous l'image?
Techniquement, il est possible de montrer à la fois. Avec cette astuce, il fonctionne:
-
Masquer la barre de navigation d'ouverture avant la prochaine ViewController:
[self.navigationController setNavigationBarHidden: OUI];
-
Afficher la barre de navigation dans la prochaine ViewController:
[self.navigationController setNavigationBarHidden: NO];
, l'image et le titre sont visibles, mais cette solution est la meilleure; -)
La solution
Je l'ai!
@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
Autres conseils
Après IOS5 Vous devriez faire, par exemple dans 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]];