iOS 5中缺少navigationController栏后退按钮

Posted

技术标签:

【中文标题】iOS 5中缺少navigationController栏后退按钮【英文标题】:navigationController bar back button missing in iOS 5 【发布时间】:2011-11-15 22:27:07 【问题描述】:

我升级到 XCode 4.2。当我的应用在 ios 4.0 模拟器中运行时,导航栏会显示在被推入的多个视图上。当应用程序在 iOS 5.0 模拟器和 iOS 5.0 设备上运行时,导航栏在所有视图中都消失了,并且表格视图被向上推以填充该空间。导航控制器是使用以下代码创建的:

navigationController = [[UINavigationController alloc] initWithRootViewController:swViewController];

视图被推送到 navigationController 上,如下所示:

    UIBarButtonItem *backButtonItem       = [[[UIBarButtonItem alloc] initWithTitle:@"NextLevel" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease] ;
    self.navigationItem.backBarButtonItem = backButtonItem;
    [self.navigationController pushViewController:self.listController animated:YES];

navigationController 通过以下方式添加到窗口中:

[window addSubview:self.navigationController.view];

更新 1 - 导航栏在 iOS 5 中的默认设置似乎是隐藏的,所以我添加了

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

我现在看到导航栏,但没有 backButtonItem 中指定的后退按钮。

更新 2 - 我还设置了 navigationController 标题,但也没有显示出来。

         self.navigationController.title       = @"Title";

导航栏在 iOS 5.0 的顶部是否可见或缺少某些内容?

【问题讨论】:

【参考方案1】:

目前还不是 100% 清楚出了什么问题。在这种情况下(适用于较旧的 iOS,升级时中断)您可能一直做错了什么,但它恰好适用于较旧的操作系统。

作为一种猜测,我建议使用 UIWindow 的 rootViewController 属性而不是旧式的 addSubview: 调用。换句话说,

window.rootViewController = self.navigationController;

看看有没有帮助。

【讨论】:

它在 iOS 5 上崩溃的原因很可能是我之前做错了什么。随着每次升级,Apple 都会尝试改进错误检查。我在上面添加了您的代码,但这并没有解决问题。【参考方案2】:

我想通了。当我按照此 SO 链接弹出备份时,我有以下代码来隐藏导航栏

hide_nav_bar

 - (void) viewWillAppear:(BOOL)animated
 
     [self.navigationController setNavigationBarHidden:YES animated:animated];
     [super viewWillAppear:animated];
 

一旦我注释掉了这段代码,后退按钮就会出现。

【讨论】:

以上是关于iOS 5中缺少navigationController栏后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 4.1 中缺少 iOS 5.0?

IOS。如何在 .xib 中嵌入 NavigationController?

iOS7 NavigationController 右滑手势问题

iOS 禁用 NavigationController 后退按钮的动画

XCode 5 / ios7:缺少gcno文件

iOS6 中奇怪的 SplitView/NavigationController 行为