Cela va dans le même sens que la réponse de Simone, mais fonctionne pour iOS 5 et iOS < 5. C'est ce que j'utilise dans l'application. Vous devez appeler [UINavigationBar setupIos5PlusNavBarImage]
quelque part dans l'initialisation de votre application (applicationDidFinishLaunching : est un bon candidat). Sur iOS 5+, setupIos5PlusNavBarImage utilisera le nouveau protocole UIAppearance pour définir l'arrière-plan et la surcharge drawRect sera ignorée. Sur iOS < 5, setupIos5PlusNavBarImage sera essentiellement un no-op et le drawRect se chargera de dessiner l'image.
Interface :
@interface UINavigationBar (CustomNavigationBar)
+ (void) setupIos5PlusNavBarImage;
- (void) drawRect: (CGRect) rect;
@end
Mise en œuvre :
@implementation UINavigationBar (CustomNavigationBar)
+ (void) setupIos5PlusNavBarImage
{
if ([UINavigationBar respondsToSelector: @selector(appearance)])
{
[[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"menuBar.png"] forBarMetrics: UIBarMetricsDefault];
}
}
- (void) drawRect: (CGRect) rect
{
UIImage* img = [UIImage imageNamed: @"menuBar.png"];
[img drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end