我使用以下方式隐藏导航:
[self.navigationController setNavigationBarHidden:YES animated:YES];
但我不需要隐藏后退按钮,这可能吗?
答案 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)
后退按钮由导航栏创建,并且始终是其中的一部分,因此无法实现。当用户触摸屏幕时,您可以隐藏并重新显示导航栏(这是照片应用在您查看单张照片时所执行的操作)或创建按钮并将其永久保留在屏幕的左上角。您还可以使导航栏部分透明,以便显示下面的内容。