0

一个奇怪的问题只出现在 iOS 6.0 上。在基于 UISplitViewController 的应用的 iPad 纵向模式下,主视图是基于导航控制器的。主视图的第一个视图控制器显示了工具栏按钮,如果我按下第二个视图控制器并隐藏工具栏,然后在弹出第二个视图控制器后,第一个视图控制器的工具栏上的按钮将永远丢失。(即,显示一个空白工具栏)。工具栏按钮在第一个视图控制器的 viewDidLoad 中初始化。在第二个视图控制器的 viewDidLoad 中调用 [self.navigationController setToolbarHidden:YES] 隐藏工具栏,在第一个视图控制器的 viewWillAppear 中调用 [self.navigationController setToolbarHidden:NO] 再次显示工具栏。

有什么建议吗?在导航控制器中隐藏/取消隐藏工具栏的正确方法是什么?

顺便说一句,它在 iOS 4.3、5.1.1 上很好,在 iPad 上的 iOS 6.0 横向模式下也很好。此问题仅在 iPad 的 iOS 6.0 纵向模式下出现。

编辑:在 iPhone、ios 6.0 上,同样的问题。但是,在装有 iOS 6.0 的 iPad 的横向模式下很好。

4

1 回答 1

1

由于 iOS 6.0 的 iPhone 也会出现此问题,因此可能与 UISplitView 纵向模式无关。(虽然 UISplitView 横向模式很好)。

所以我专注于 UINavigationController 的工具栏显示/隐藏,这个线程(导航控制器中的工具栏)解决了我的问题。

我删除了 viewDiDLoad 和 viewWillAppear 中的 setToolBarHidden 代码,并实现了 UINavigationController 委托协议:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    BOOL shouldHide = [viewController.toolbarItems count] == 0;
    [navigationController setToolbarHidden:shouldHide animated:animated];
}

现在它起作用了。但是,我仍然不知道为什么原始代码在 iPhone 和 iPad 纵向模式下的 iOS 6.0 上不起作用。

于 2012-09-23T02:21:45.843 回答