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];
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.
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.
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;
}
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;
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];
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
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)
Vous pouvez également ajouter une catégorie qui étend la classe UINavigationBar et remplacer la méthode drawRect: de la catégorie.
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];
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];
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];