隐藏导航栏但不隐藏后退按钮

我使用以下方法隐藏导航:

[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]; 

只要有指向导航栏的指针,就可以这样做。 例如,在ViewControllerviewDidLoad方法中。

对于较旧的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方法中。

后退按钮由导航栏创建,并且始终是其中的一部分,因此无法实现。 当用户触摸屏幕时,您可以隐藏并重新显示导航栏(这是照片应用在您查看单张照片时所执行的操作)或创建按钮并将其永久保留在屏幕的左上角。 您还可以使导航栏部分透明,以便显示下面的内容。