一、这篇文章解决的问题是
ios11系统以下,从一个需要隐藏导航条的视图跳转另一个不需要隐藏导航条的视图中,假如前一个视图需要更换状态栏样式,这个时候用以下代码会导致使用导航条手势去来回切换视图,导致导航条丢失。
1.第一个视图的设置导航条隐藏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
且通过以下方法更换状态栏样式
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
2.第二个视图设置导航条不隐藏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
这个时候如果使用导航条手势来回切换视图,会出现导航丢失的情况,如下图(图片有点大,稍稍的等一下吧)
二、解决方法如下:
1.将隐藏导航条的方法改为
[self.navigationController setNavigationBarHidden:YES animated: NO];
导航条不丢失了,但是交互效果很不友好。
2.在info.plist设置View controller-based status bar appearance为NO,使用下面的代码更改状态栏
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
可以解决这个问题,推测是ios11以下的系统对于导航条和状态栏的交互处理有问题。