Juste à titre de réflexion supplémentaire, j'ai réussi à obtenir une barre de navigation entièrement personnalisée en remplaçant drawRect:
pour qu'elle affiche une image de fond. À partir de là, il a été facile de définir les propriétés leftBarButtonItem
, rightBarButtonItem
et titleView
de la propriété navigationItem
de mon contrôleur de navigation pour obtenir des boutons et des titres personnalisés. Cela fonctionne avec le contrôleur de navigation intégré/la barre de navigation/la logique de l'élément de navigation, donc il n'y a aucun risque que des choses (comme les boutons de barre) soient cachées ou obscurcies.
Dans une catégorie UINavigationBar
:
- (void)drawRect:(CGRect)rect
{
[ [ UIImage imageNamed:@"background-image.png" ] drawInRect:CGRectMake(0, 0,
self.frame.size.width, self.frame.size.height) ];
}
droit avant d'appeler pushViewController:animated:
, faire quelque chose comme ceci:
UIButton * leftButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
leftButton.frame = CGRectMake(0.0, 0.0, 65.0, 32.0);
[ leftButton setImage:[ UIImage imageNamed:@"left.png" ] forState:UIControlStateNormal ];
[ leftButton addTarget:self action:@selector(leftAction) forControlEvents:UIControlEventTouchUpInside ];
UIButton * rightButton = [ UIButton buttonWithType:UIButtonTypeCustom ];
rightButton.frame = CGRectMake(0.0, 0.0, 65.0, 32.0);
[ rightButton setImage:[ UIImage imageNamed:@"right.png" ] forState:UIControlStateNormal ];
[ rightButton addTarget:self action:@selector(rightAction) forControlEvents:UIControlEventTouchUpInside ];
UIImageView * titleView = [ [ UIImageView alloc ] initWithImage:[ UIImage imageNamed:@"title.png" ] ];
UIBarButtonItem * leftBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView :leftButton ];
UIBarButtonItem * rightBarButtonItem = [ [ UIBarButtonItem alloc ] initWithCustomView:rightButton ];
nextController.navigationItem.leftBarButtonItem = leftButtonItem;
nextController.navigationItem.rightBarButtonItem = rightButtonItem;
nextController.navigationItem.titleView = titleView;
Il est un peu occupé peut-être, mais vous pouvez abstraire tout ce code dans une méthode (ou une série de ceux-ci) ailleurs. Cette approche a tendance à bien fonctionner si vous souhaitez remplacer complètement le style qui se produit dans votre barre de navigation.
Espérons que cela aide!
Si vous l'avez défini sur viewDidAppear, cela fonctionne parfaitement. Merci ;) – Joze