上一个界面要求隐藏导航栏 下一个界面显示导航栏
- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController.navigationBar setHidden:YES]; }
- (void)viewWillDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; [self.navigationController.navigationBar setHidden:NO]; }
这样写的话屏幕在界面切换的时候会很不舒服 造成用户体验性很差
- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated]; }
- (void)viewWillDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated]; }
如此写的话就不会出现这种情况 完美解决
问题分析
在网上查了一圈 发现如下阐述
应该是UINavigationController 在导航栏控制API上设计的缺陷,一个UINavigationController管理了N个UIViewController栈式的push和pop,而UINavigationBar 有UINavigationController管理.这就导致了UIViewConstroller无法控制自己上面bar单独隐藏和显示,非常类似UIApplication全局的status bar,不过在iOS7之后为viewController控制自己的status bar 提供下面的几个方法:
-(BOOL)prefersStatusBarHidden;
-(UIStatusBarStyle)preferredStatusBarStyle;
-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation;