【问题标题】:Hide Navigation Bar but not the back button隐藏导航栏但不隐藏后退按钮
【发布时间】:2012-04-21 07:40:00
【问题描述】:

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

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

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

【问题讨论】:

  • 也许没有。因为后退按钮是导航栏的一部分,恐怕没有。

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


【解决方案1】:

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

【讨论】:

  • 我想擦除导航栏下的垃圾阴影......这是可能的
  • 如果您使用的是 iOS 5,您可以自定义导航栏的外观。在此处查看 WWDC Session 114 视频或 iOS 5 文档中的“UIKit 控件的自定义外观”:developer.apple.com/library/ios/#releasenotes/General/…
  • 导航栏下方有一条小黑线...我需要隐藏或删除它。
【解决方案2】:

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 方法内部也是一个好地方。

【讨论】:

  • 这就是我的解决方案,第一个......代码放在哪里?在视图中加载了吗?
  • 我已经用推荐的代码位置更新了答案。 iOS 5 方法和自定义后退按钮可以在您可以访问 navBar 或您推送给它的 viewController 的任何地方。 iOS 5 之前的解决方法需要在自己的 UINavigationBar 类别中实现。
猜你喜欢
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多