关于导航栏隐藏和显示 出现的屏幕花屏

上一个界面要求隐藏导航栏 下一个界面显示导航栏
- (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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容