Vous pouvez également remplacer le drawLayer: inContext: méthode dans une classe de catégorie UINavigationBar. Dans la méthode drawLayer: inContext:, vous pouvez dessiner l'image d'arrière-plan que vous souhaitez utiliser. Vous pouvez également utiliser des images de différentes tailles pour les orientations portrait et paysage si vous le souhaitez.
- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
return;
}
UIImage *image = (self.frame.size.width > 320) ?
[UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
CGContextClip(context);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}
Et comme un projet démo complète Xcode sur la personnalisation de l'apparence de UINavigationBar this et this pourrait être utile.
Mis à jour pour refléter le fait que ce n'est plus la manière de le faire. – jrtc27
Super de voir quelqu'un garder leurs réponses à jour. Merci! –