self.navigationController.navigationBar setHidden:视图控制器被换出时不起作用

时间:2013-06-19 21:01:58

标签: ios ios6

我在隐藏和显示UINavigationBar时遇到了一些奇怪的行为。

在我的viewWillAppear方法中,我称之为:

self.navigationController.navigationBar.hidden = YES;

当用户按下按钮时,我正在调用它:

self.navigationController.navigationBar.hidden = NO;

然后使用自定义UINavigationController的viewControllers属性交换当前视图控制器。

这样可以正常工作,但是如果我尝试使用viewWillDisappear方法中的相同行显示navigationBar,则它不起作用。 navigationBar仍然是隐藏的。

我可以使用以下方法在viewWillDisappear中显示/隐藏状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

但显示/隐藏UINavigationBar不起作用!

编辑:此外,{I}尝试在self.navigationController.isNavigationBarHidden中显示栏后,NO会返回viewWillDisappear,但该栏仍处于隐藏状态。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:11)

因为您已经将当前视图控制器交换出堆栈,所以self.navigationController在调用nil时可能是viewWillDisappear

答案 1 :(得分:1)

最好不要从self.navigationController发送消息viewWillDisappear,因为它可能是nil。我建议您始终在navigationBarHidden内修改viewWillAppear属性,而不是继续引用,如同在此答案https://stackoverflow.com/a/27748007/2248638中一样。我的BOOL navigationBarHidden基类上有一个UIViewController属性,所以我只需要为隐藏的那些视图控制器设置一次属性。

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