4

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

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

self.navigationController.navigationBar.hidden = YES;

当用户按下按钮时,我称之为:

self.navigationController.navigationBar.hidden = NO;

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

这很好用,但如果我尝试在viewWillDisappear方法中使用同一行显示导航栏,它就不起作用。导航栏仍然隐藏。

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

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

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

编辑:另外,在我尝试显示该栏但该栏仍然隐藏后self.navigationController.isNavigationBarHidden返回。NOviewWillDisappear

任何帮助将不胜感激。谢谢!

4

2 回答 2

11

因为您已经将当前视图控制器从堆栈中交换出来,self.navigationController所以可能是nilviewWillDisappear调用时。

于 2013-06-19T21:56:19.467 回答
1

你最好不要像急切指出的那样发消息,因为它可能self.navigationController是。我建议不要保留参考,而是始终从内部编辑属性,如本答案https://stackoverflow.com/a/27748007/2248638中所示。我的基类上有一个属性,因此我只需要为那些隐藏的视图控制器设置一次属性。viewWillDisappearnilnavigationBarHiddenviewWillAppearBOOL navigationBarHiddenUIViewController

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:self.navigationBarHidden animated:animated];
}
于 2016-06-02T09:38:02.043 回答