我使用以下方法隐藏我的导航:
[self.navigationController setNavigationBarHidden:YES animated:YES];
但我不需要隐藏后退按钮,这可能吗?
我使用以下方法隐藏我的导航:
[self.navigationController setNavigationBarHidden:YES animated:YES];
但我不需要隐藏后退按钮,这可能吗?
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];
您可以在有指向导航栏的指针的地方执行此操作。例如,在viewDidLoad
您的ViewController
.
对于较旧的 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
方法内部。
后退按钮是由导航栏创建的,并且始终是导航栏的一部分,因此这是不可能的。您可以在用户触摸屏幕时隐藏并重新显示导航栏(这是照片应用程序在您查看单张照片时所做的事情),或者创建一个按钮并将其永久放在屏幕的左上角。您还可以使导航栏部分透明,以便显示下面的内容。