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

时间:2012-04-08 17:03:29

标签: iphone ios cocoa-touch uinavigationbar back-button

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

[self.navigationController setNavigationBarHidden:YES animated:YES];

但我不需要隐藏后退按钮,这可能吗?

2 个答案:

答案 0 :(得分:3)

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的{​​{1}}方法内。

对于较旧的iOS版本,您需要通过制作ViewController类别并覆盖UINavigationBar方法来解决方法:

drawRect

如果您想支持所有iOS版本,这两种方法都是兼容的 因此,您应该记住,后退按钮使用相同的背景图像。因此,您需要制作一个自定义的。

@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

需要为要推送到导航栏的每个ViewController实现此代码。一个好地方也在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]; 方法中。

答案 1 :(得分:0)

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