当前位置:   article > 正文

iOS开发 -- iOS 14下popToRootViewControllerAnimated:YES 导致TabBar隐藏的问题

poptorootviewcontroller

写在前面

文章中的问题会出现在Xcode 12 + iOS 14上, 经过测试,

  • Xcode 11 + iOS14,
  • Xcode 12 + <= iOS 13

不会出此类问题.

问题

我们处理UITabbar在push的时候的显示和隐藏, 之前因该是如下的操作:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (self.viewControllers.count > 0) {
        viewController.hidesBottomBarWhenPushed = YES;
    } else {
        viewController.hidesBottomBarWhenPushed = NO;
    }
    [super pushViewController:viewController animated:animated];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这个在iOS 14之前是没问题的, 但是升级到iOS 14, 发现我们在执行 popToRootViewControllerAnimated:YES的时候, UITabBar隐藏了.

尝试

网上有说, 不执行动画就不会出现这个问题, 经过尝试, 确实不会出现这个问题, 但是感觉生硬, 所以暂时不考虑此类解决方案.

之后, 又尝试了几种方案都不行.如手动显示Tabbar等, 发现会出现混乱.

曙光

A->B->C    A <= C
  • 1

最后, 尝试在C中将B从viewControllers中移除掉,
执行 popToRootViewControllerAnimated:YES的时候, UITabBar显示了,

于是猜测viewController.hidesBottomBarWhenPushed在iOS 14中针对当前导航存在过度设置的问题(说法可能不够官方).

解决

于是乎, 做了如下操作, 解决了问题:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if (self.viewControllers.count > 0) {
    	// 当前导航栏, 只有第一个viewController push的时候设置隐藏
        if (self.viewControllers.count == 1) {
            viewController.hidesBottomBarWhenPushed = YES;
        }
    } else {
        viewController.hidesBottomBarWhenPushed = NO;
    }
    [super pushViewController:viewController animated:animated];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

如果大佬们知道其原理, 希望可能多多指导小弟, 谢谢了.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/382029
推荐阅读
相关标签
  

闽ICP备14008679号