在iOS开发中,特别是一些首页展示上要去掉导航栏(UINavigationBar)。
最简单的办法在- (void)viewWillAppear:(BOOL)animated
方法中直接设置隐藏导航栏,在(void)viewWillDisappear:(BOOL)animated
方法中在显示出导航栏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
但是这样会出现一个问题,就是切换到这个界面的时候,会出现整个界面上移的效果,体验不是很好。如图所示的效果
切换界面上移.gif这时候你可能想到是:你设置隐藏导航栏的时候animate动画设置为NO就不会上移了。 这样确实是不会有界面整体上移的假象,但是会出现另外一个问题,当你直接返回的时候都没有问题,一旦你用侧滑返回的时候,界面最上面导航栏那里就出现了异常,如图所示
去掉动画隐藏效果.gif这到底应该怎么做呢???
我的解决办法是:
在要隐藏导航栏的界面的viewWillAppear方法中隐藏导航栏
,当你跳转进入到下一个的时候,要显示导航栏,在这个界面的viewWillAppear方法中设置导航栏出现。
方法和上面的一致,
//当前要隐藏导航栏的VC
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
//要显示导航栏的VC
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
这样就会避免了上面的两个问题。但是这样子做比较麻烦,就是你在当前隐藏导航栏的VC所有可跳转到的VC,都要设置一下显示导航栏。
朋友们有别的解决方案,跪求告知,O(∩_∩)O谢谢
2017.10.9补充一个问题点:
在开发中可能会遇到在不同的界面改变导航栏颜色的需求,在不同的VC中重写了这个方法设置导航栏颜色,- (UIStatusBarStyle)preferredStatusBarStyle
,就可能会出现异常。
解决方案:
其实解决的办法很简单,就是在导航控制器中重写childViewControllerForStatusBarStyle方法,如下:
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.visibleViewController;
}
这句代码的作用是,不调用自己本身的preferredStatusBarStyle
方法而是调用显示的控制器的preferredStatusBarStyle
方法。
网友评论
我验证过两次的,应该不会额,看它的执行顺序也不会出现的。