寫在前面
文章中的問題會出現在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];
}
如果大佬們知道其原理, 希望可能多多指導小弟, 謝謝了.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/87747.html
標籤:其他
