导航栏的隐藏显示问题
2020-08-26 本文已影响0人
Rumbles
1.频繁的设置setNavigationBarHidden 会导致导航栏出现各种问题 测滑出现黑边等等问题
为了避免这种问题 我们应该尽量少的调用这个api的次数
如只在viewWillAppear 设置导航栏的显示隐藏 viewWillDisappear不做处理 总之越少调用 出现问题的概率月底
出现问题的原因
1.如果只有一个页面需要隐藏显示 那么 这样写没有问题
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
2.但是一旦出现连续的两个页面都需要执行隐藏操作 我们会在两个页面写上面的代码 导致setNavigationBarHidden: 执行了4次 就会出现很多问题
解决方法1.
我们应该减低 setNavigationBarHidden api的调用次数 这里提供一个解决方法
我们在基类里面 设置所有的controller 导航栏的显示隐藏 记住每一个类都要设置
将需要隐藏的类写在一个文件里面 然后在viewWillAppear 逐个设置
如果遇到一个页面 有时需要显示有时需要隐藏 那么特殊页面特殊处理 【基类需要做过滤操作】
代码如下 最好判断下上一个页面是隐藏还是显示[遵循我们减少调用 setNavigationBarHidden api的原则]
BOOL lastIsHidden = self.navigationController.navigationBarHidden;
if (self.isHideNavBar == 1 && !lastIsHidden) [self.navigationController setNavigationBarHidden:YES animated:NO];
完美解决掉各种问题
解决方案2 可以在下面的方法里面设置【没有亲测 ,但感觉可行】
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated函数里面去设置