32 votes

Comment ajouter une image de fond sur la barre de navigation iphone?

Je veux ajouter un fond d'image, à ma barre de navigation comme ceci:

texte alternatif

Quel est le code ?

Merci

Est ce juste ?

 //set custom background image
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]];
[self.navigationBar insertSubview:backgroundView atIndex:0];
[backgroundView release];
 

98voto

iwat Points 1624

Voici le code du lien @luvieere mentionné. Collez ce code dans les rootview contrôleur juste au-dessus @implementation rootviewController

@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

Comme de l'iOS 5, il est un moyen officiel pour ce faire. (voir la Bibliothèque de développement iOS)

// someplace where you create the UINavigationController
if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

Mais encore, conserver l'ancien code pour la compatibilité descendante, sauf si vous voulez vraiment fossé iOS 4 et ci-dessous.

32voto

luvieere Points 19689

Votre code ne suffira pas à faire cela, vous aurez à écrire une catégorie dans l'ordre pour que cela fonctionne. Il existe deux approches quant à la façon dont vous devez le faire: la première consiste à faire de l'image une sous-vue de votre UINavigationBar et re-porter à l'avant dans chacun de vos UIViewControllers' viewDidAppear méthode. Cela a toutefois été signalé avoir quelques problèmes avec la couverture du droit UIBarButtonItem. L'autre méthode implique la substitution - (void)drawRect:(CGRect)rect et le dessin de l'image. Deux de ceux-ci sont largement couverts dans cette discussion.

9voto

drunknbass Points 867

Le moyen le plus simple consiste simplement à définir le contenu de la couche UINavigationBar .

 NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"];
[nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];
 

L'inconvénient est que les boutons ne sont pas générés à partir de la teinte appropriée, mais vous pouvez régler la couleur de la barre de navigation sur celle qui est la plus proche de votre image bg. La teinte doit être prise en charge.

8voto

Nathan Sakoetoe Points 6090

Je ferais cela dans l'appdéléguer quelque chose comme

 + (void)Generalstyle {
    //navigationbar
    UINavigationBar *navigationBar = [UINavigationBar appearance];
    [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault];

}
 

Et en

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    [[self class] Generalstyle];

}
 

fichier .h:

 + (void) Generalstyle;
 

8voto

jianpx Points 1395

sous ios5, je règle l'image d'arrière-plan de la barre de navigation (pour toutes les images de la barre de navigation) en AppDelegate.m :

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    UIImage *navBarBackgroundImage = [UIImage imageNamed:@"nav_bg"];
    [[UINavigationBar appearance] setBackgroundImage:navBarBackgroundImage forBarMetrics:UIBarMetricsDefault];
    return YES;
}
 

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