1

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

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

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

4

2 回答 2

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您的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方法内部。

于 2012-04-08T18:44:58.217 回答
0

后退按钮是由导航栏创建的,并且始终是导航栏的一部分,因此这是不可能的。您可以在用户触摸屏幕时隐藏并重新显示导航栏(这是照片应用程序在您查看单张照片时所做的事情),或者创建一个按钮并将其永久放在屏幕的左上角。您还可以使导航栏部分透明,以便显示下面的内容。

于 2012-04-08T17:20:30.897 回答