Есть несколько возможных решений:
Самое быстрое решение Для самых ленивых из нас:
@interface MyNavigationBar : UINavigationBar
@end
@implementation MyNavigationBar
- (void)drawRect:(CGRect)rect {
}
@end
@implementation UINavigationBar (BecauseIMLazyHacks)
/*
Another Ugly hack for iOS 5.0 support
*/
+ (Class)class {
return NSClassFromString(@"MyNavigationBar");
}
-(void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, self.frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0,
self.frame.size.width, self.frame.size.height), barBackground.CGImage);
}
@end
Опять.Это работает, но Вы не должны делать это следующим образом.
Другой способ, предложенный в WWDC'11, состоит в том, чтобы переопределить UINavigationBar (Create MyNavigationBar) и инициализировать UINavigationController из xib, как здесь:
http://www.iosdevnotes.com/2011/09/custom-uinavigationbars-techniques/
И, наконец, используйте переключатель логического потока для iOS5.0 и iOS5.0 - используйте новый API, где это возможно.
Категории - неправильный путь, Swizzlingэто неправильный путь.(Они просто шепчут вам в уши: «Отдайтесь темной стороне. Это единственный способ сохранить ваши приложения».)