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

260 阅读1分钟

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