nevan king 是对的但是您可以简单地更改导航栏的背景图像或将其设置为 nil。如果您将其设置为 nil 或提供透明的 BG 图像,您将达到您需要的效果。
对于 iOS >= 5.0,您可以简单地设置外观:
if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) // needed if iOS older than 5.0 is also supported
[navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
只要有指向导航栏的指针,您就可以做到这一点。例如。在 ViewController 的 viewDidLoad 方法内。
对于较旧的 iOS 版本,您需要通过将UINavigationBar 设为类别 并覆盖drawRect 方法来解决问题:
@implementation UINavigationBar (BackgroundImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @""];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
如果您想支持所有 iOS 版本,这两种方法都是兼容的。
因此,您应该记住,后退按钮使用相同的背景图像。所以你需要定制一个。
UIImage *bgImageNormal = [UIImage imageNamed:@"backButtonImage.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: bgImageNormal forState:UIControlStateNormal];
button.frame= CGRectMake(0.0, 0.0, bgImageNormal.size.width, bgImageNormal.size.height);
[button addTarget:self action:@selector(navigationBarBackButtonTouchUpInside:) forControlEvents:UIControlEventTouchUpInside]; // your action method here
UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = closeButton;
[closeButton release];
需要为您推送到导航栏的每个 ViewController 实现此代码。 viewDidLoad 方法内部也是一个好地方。