近期在項目中跳轉兩層以上頁面執行popToRootViewControllerAnimated
方法時,發現會造成底部tabbar
隱藏
逐步打印頁面層級結構發現,在A-B-C頁面push
跳轉中,打印self.navigationController.viewControllers
方法獲取到的是正常的層級數組[A,B,C]
但在執行popToRootViewControllerAnimated
后,正常情況下或iOS14以下版本中在root頁面A頁面打印層級數組應該是[A]
,[self.navigationController.childViewControllers indexOfObject:self]
的index為0,這時為正確?的情況,tabbar在root頁面會正常顯示;
但在ios14版本中在root頁面A頁面獲取到的數組發成了錯亂?,變成了[C,A]
,index變為了1,由于根導航控制器中有做viewController.hidesBottomBarWhenPushed = YES;
處理,會導致tabbar消失隱藏
尋找一眾原因終于在蘋果開發者論壇中看到了同樣的執行popToRoot造成tabbar消失問題,發覺應該是官方錯誤,只能在根導航控制器中先做預處理???♀????♀????♀?
目前僅在iOS14版本發現此問題,其他版本尚無問題
解決方案
重寫RootNavigationController的popToRootViewControllerAnimated
方法
- (NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated {
if (self.viewControllers.count > 1) {
self.topViewController.hidesBottomBarWhenPushed = NO;
}
return [super popToRootViewControllerAnimated:animated];
}