Đây là dọc theo dòng giống như câu trả lời Simone, nhưng làm việc cho iOS 5 và iOS < 5. Đây là những gì tôi đang sử dụng trong ứng dụng. Bạn cần gọi số [UINavigationBar setupIos5PlusNavBarImage]
ở đâu đó trong quá trình khởi tạo ứng dụng của bạn (applicationDidFinishLaunching: là một ứng cử viên tốt). Trên iOS 5+, setupIos5PlusNavBarImage sẽ sử dụng giao thức UIAppearance mới để đặt nền và ghi đè drawRect sẽ bị bỏ qua. Trên iOS < 5, setupIos5PlusNavBarImage về cơ bản sẽ là một no-op và drawRect sẽ xử lý việc vẽ hình ảnh.
Interface:
@interface UINavigationBar (CustomNavigationBar)
+ (void) setupIos5PlusNavBarImage;
- (void) drawRect: (CGRect) rect;
@end
Thực hiệ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 là theo NDA vì vậy tôi nghĩ bạn có thể thảo luận về nó trên các diễn đàn dành riêng cho táo của chỉ – Vladimir