我在隐藏和显示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
,但该栏仍处于隐藏状态。
非常感谢任何帮助。谢谢!
答案 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];
}