导航栏的隐藏显示问题

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函数里面去设置
上一篇下一篇

猜你喜欢

热点阅读