web-dev-qa-db-fra.com

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

Je souhaite ajouter un fond d’image à la barre de navigation.

Est ce bien?

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

Voici le code du link @luvieere mentionné . Collez ce code dans le contrôleur rootview juste au dessus de @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

Depuis iOS 5, il existe un moyen officiel de le faire. (voir 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];
}

Néanmoins, conservez l’ancien code pour assurer la compatibilité ascendante, à moins que vous ne souhaitiez abandonner iOS 4 et versions antérieures.

98
iwat

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 définir la couleur de la barre de navigation de la manière la plus proche de votre image bg. La teinte doit être prise en compte.

9
drunknbass

sous ios5, je règle l'image d'arrière-plan de la barre de navigation (pour toute l'image de la barre de navigation) dans 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;
}
8
jianpx

Je ferais cela dans les appdelegate 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;
8
Blazer

Celui-ci fonctionne bien sous iOS 6 et 7 

UINavigationBar *navBar = [[self navigationController] navigationBar];
  UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
  [navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
2
Gurumoorthy Arumugam

Lorsque l'iphone 5 arrive, nous devons définir les deux types d'appareils. Alors utilisez ceci

if([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
//iOS 5 new UINavigationBar custom background
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg_ForiPhone5_Imagename.png"] forBarMetrics: UIBarMetricsDefault];
} else {
[self.navigationController.navigationBar insertSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbg_ForOtherIphone_Imagename.png"]] atIndex:0];
}

Pour plus d'informations, allez sur link

2
Isuru Jayathissa

Version Swift

let navBar = UINavigationBar.appearance();
navBar.setBackgroundImage(UIImage(named: "yourImageName"), forBarMetrics: .Default)

Mise à jour Swift 3.2

let navBar = UINavigationBar.appearance();
        navBar.setBackgroundImage(UIImage(named: "yourImageName"), for: .default)
1
Babul Prabhakar

Vous pouvez également ajouter une catégorie qui étend la classe UINavigationBar et remplacer la méthode drawRect: de la catégorie.

0
nduplessis

Lors de l'ajout de l'image d'arrière-plan de la barre de navigation, vous devez faire très attention à ses dimensions. Assurez-vous d'avoir les dimensions suivantes pour différentes tailles d'écran.

1) background.png => 320x44
2) [email protected] => 640x88 // utilisé pour iPhone5 et pour les appareils avec rétine
3) [email protected] => 1334x183 // utilisé pour iPhone6 

Utilisez le code suivant pour ajouter une image d'arrière-plan et éviter toute mosaïque dans l'image d'arrière-plan de la barre de navigation.

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];
0
Aamir

Essayez ce code dans votre classe AppDelegate pour afficher l’image dans la barre de navigation. Cela vous aidera beaucoup. 

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];
0
Shahzaib Maqbool

ce que j’ai fait vient de créer un UIImage avec l’image que je voulais et de l’ajouter à la barre de navigation comme ceci. 

UIImage *image = [UIImage imageNamed:@"yourImage.png"];

[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
0