2008-12-18 6 views
0

J'ajoute une image d'arrière-plan personnalisée à ma barre de navigation en créant une vue d'image et en faisant un [navigationController.navigationBar addSubview:imageView].éléments de navigation disparaissent de UINavigationBar

Le fond vient bien. Mais dès que je fais cela, mes autres éléments de navigation commencent à se comporter de manière étrange. Parfois le navigationItem.title apparaît, le bouton de retour disparaît. Et c'est totalement aléatoire. Une idée de ce qui pourrait en être la cause?

Merci.

Répondre

2

Dans le processus d'installation de la vue, ajoutez-vous votre sous-vue? Vous pouvez le faire après que vos autres éléments de nav ont été ajoutés, et donc c'est leur couverture. Essayez soit de l'ajouter dans votre méthode -loadView, soit d'attendre jusqu'à -viewWillAppear :, et d'utiliser -sendSubviewToBack: après l'avoir ajouté.

+1

Si vous l'avez défini sur viewDidAppear, cela fonctionne parfaitement. Merci ;) – Joze

1

Merci beaucoup. J'ai mis le imageView à l'index 0 et cela a résolu le problème.

2

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!

Questions connexes