赞
踩
文章中的问题会出现在Xcode 12 + iOS 14上, 经过测试,
不会出此类问题.
我们处理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];
}
如果大佬们知道其原理, 希望可能多多指导小弟, 谢谢了.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。