Принятый ответ имел проблему для меня.
У моего приложения была навигация с глубиной три UIViewController.
- Показ FirsViewController - это UITabBar.(Правильно)
- FirsViewController выдвигает SecondViewController, а SecondViewController не отображает UITabBar.(Правильно)
- SecondViewController выдвинул ThirdViewController, а ThirdViewController показывает UITabBar.(Неверно)
- ThirdViewController подключился к SecondViewController, а SecondViewController показывает UITabBar.(Неверно)
- SecondViewController подключен к FirstViewController, а FirstViewController показывает UITabBar.(Правильно)
Решением для меня было установить делегата UINavigationControllerDelegate
swift:
self.navigationController?.delegate = self
Objective-c:
self.navigationController.delegate = self;
А затем реализуйте следующий метод делегата
Swift:
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;
}
Надеюсь, это помогло.