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

09/20 11:44
阅读数 2.4K

写在前面

文章中的问题会出现在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];
}

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

尝试

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

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

曙光

A->B->C    A <= C

最后, 尝试在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];
}

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

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部