Esto es a lo largo de la misma línea que la respuesta de Simone, pero funciona para iOS 5 y iOS < 5. Esto es lo que estoy usando en la aplicación. Debe llamar al [UINavigationBar setupIos5PlusNavBarImage]
en algún lugar de la inicialización de su aplicación (applicationDidFinishLaunching: es un buen candidato). En iOS 5+, setupIos5PlusNavBarImage utilizará el nuevo protocolo UIAppearance para establecer el fondo y se ignorará la anulación drawRect. En iOS < 5, setupIos5PlusNavBarImage será básicamente no operativo y drawRect manejará el dibujo de la imagen.
Interfaz:
@interface UINavigationBar (CustomNavigationBar)
+ (void) setupIos5PlusNavBarImage;
- (void) drawRect: (CGRect) rect;
@end
Implementación:
@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
IOS5 es bajo NDA por lo que creo que se puede hablar de ello en los foros dedicados de Apple sólo – Vladimir