31 votes

Ajout d'une image à la barre de navigation

Je voudrais une image à l'ensemble d'une barre de navigation. C'est la navigation qui vient avec une navigation en fonction de l'application. Il apparaît sur la RootViewController avec l'accompagnement UITableView. J'ai vu quelques exemples de la façon dont cela pourrait fonctionner.

Set de navigation de la barre de titre:

UIImage *image = [UIImage imageNamed:@"TableviewCellLightBlue.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar.topItem setTitleView:imageView];

Le problème, c'est qu'il ne couvre que le titre plutôt que l'ensemble de la barre de navigation.

Il y a aussi ce fil: http://discussions.apple.com/message.jspa?messageID=9254241#9254241. Vers la fin, la solution est d'utiliser une barre d'onglets, dont je ne suis pas à l'aide. Il est compliqué de définir une barre de navigation en arrière-plan? Est-il une autre technique plus simple?

J'aimerais avoir un arrière-plan de la navigation et de toujours être en mesure d'utiliser le titre du texte.

36voto

Jean Regisser Points 1743

Dans votre cas, cette solution trouvée dans une autre réponse serait bien travailler.

Avec le "CustomImage" catégorie à UINavigationBar, ensuite, vous pouvez simplement appeler:

UINavigationBar *navBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed:@"yourNavBarBackground.png"];
[navBar setBackgroundImage:image];

Ce code devrait aller dans la méthode

- (void)viewWillAppear:(BOOL)animated

de l'avis du contrôleur de l'endroit où vous voulez avoir l'image personnalisée. Et, dans ce cas, vous devez appeler:

[navBar clearBackgroundImage]; // Clear any previously added background image

avant setBackgroundImage (sinon, il sera ajouté à de multiples reprises...)

23voto

user513790 Points 640

son changé pour ios6, pour le faire fonctionner dans ios 6 utiliser:

 UINavigationBar *navBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed:@"image.png"];
[navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
 

9voto

cmp Points 156
UIImage *image = [UIImage imageNamed:@"YourImage.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

[self.navigationController.navigationBar addSubview:imageView];

8voto

LucasTizma Points 5452

Il est en fait un moyen beaucoup plus facile pour ajouter une image d'arrière-plan à tout UIView classe ou sous-classe. Il ne nécessite pas de classe de catégorisation ou d'extension (sous-classement), et vous pouvez le faire sur une "au besoin". Par exemple, pour ajouter une image d'arrière-plan à la vue du contrôleur de la barre de navigation, procédez de la manière suivante:

self.navigationController.navigationBar.layer.contents = (id)[UIImage 
    imageNamed:@"background.png"].CGImage;

Vous aurez besoin de ne pas oublier d'ajouter le Quartz cadre de Base à votre projet et ajoutez #import <QuartzCore/QuartzCore.h> où vous en avez besoin pour ce faire. C'est beaucoup plus propre, plus simple de modifier la couche de dessin de quelque chose qui hérite de UIView. Bien sûr, si vous voulez obtenir un effet similaire pour toutes les barres de navigation ou barres d'onglets, puis sous-classement est logique.

4voto

Nikhil Dinesh Points 1412
UIImage *logo = [UIImage imageNamed:@"my_logo"];
UIImageView *logoView = [[UIImageView alloc]initWithImage:logo];
logoView.frame = CGRectMake(0, 0, 320, 37);

UINavigationController *searchNavCtrl = [[UINavigationController alloc] initWithRootViewController:searchViewController];
searchNavCtrl.navigationBar.barStyle = UIBarStyleBlack;


//searchNavCtrl.navigationItem.titleView = logoView;
//[searchNavCtrl.navigationController.navigationBar.topItem setTitleView:logoView];
[searchNavCtrl.navigationBar addSubview:logoView];

[logoView release];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X