受け入れられた答えは私にとって問題がありました。
私のアプリには、3つのUIViewControllerの深さのナビゲーションがありました。
- FirsViewControllerショーのUITabBar。(正しい)
- FirsViewControllerはSecondViewControllerをプッシュし、SecondViewControllerはUITabBarを表示しません。(正しい)
- SecondViewControllerはThirdViewControllerをプッシュし、ThirdViewControllerはUITabBarを表示します。(正しくない)
- ThirdViewControllerがSecondViewControllerにポップされ、SecondViewControllerショーのUITabBarが表示されます。(正しくない)
- SecondViewControllerがFirstViewControllerにポップされ、FirstViewControllerショーのUITabBarが表示されます。(正しい)
私にとっての解決策は、UINavigationControllerDelegateのデリゲートを設定することでした
迅速:
self.navigationController?.delegate = self
Objective-c:
self.navigationController.delegate = self;
そして、次のデリゲートメソッドを実装します
迅速:
fun navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
if fromVC.isKindOfClass(FirstViewController) && toVC.isKindOfClass(SecondViewController) {
self.hidesBottomBarWhenPushed = true;
}
else if fromVC.isKindOfClass(SecondViewController) && toVC.isKindOfClass(FirstViewController) {
self.hidesBottomBarWhenPushed = false;
}
return nil
}
Objective-c:
-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
animationControllerForOperation:(UINavigationControllerOperation)operation
fromViewController:(UIViewController*)fromVC
toViewController:(UIViewController*)toVC
{
if ([fromVC isKindOfClass:[FirstViewController class]] && [fromVC isKindOfClass:[SecondViewController class]]) {
self.hidesBottomBarWhenPushed = true;
}
else if ([fromVC isKindOfClass:[SecondViewController class]] && [fromVC isKindOfClass:[FirstViewController class]]) {
self.hidesBottomBarWhenPushed = false;
}
return nil;
}
お役に立てば幸いです。