Вы также можете переопределить метод drawLayer: inContext: в классе категории UINavigationBar. Внутри метода drawLayer: inContext: вы можете нарисовать фоновое изображение, которое хотите использовать. Вы также можете использовать изображения разных размеров для портретной и альбомной ориентации, если хотите.
- (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);
}
И как полный демонстрационный проект Xcode по настройке внешнего вида UINavigationBar , это и , это может быть полезным.