当推入导航堆栈时隐藏TabBar并在弹出导航堆栈时将其恢复

Yog*_*esh 13 objective-c uitabbarcontroller uitabbar ios swift

我正在尝试执行以下操作.

我有一个标签栏控制器,里面有2个标签.两个选项卡都是导航控制器,每个选项卡都有一个表视图.

现在,当我在第一个选项卡中选择表格的一个单元格时,我正在推动另一个标签栏控制器,所以我想隐藏父标签栏控制器的标签栏,当我单击导航栏上的后退按钮时,我希望再次查看父标签栏,因为我在父标签栏视图中.

我试过hidesbottombarwhenpushed并隐藏了父标签栏控制器标签栏但是当我点击它时它不会带回来.

Yog*_*esh 38

好的,最后我得到了答案,这就是我想要做的.

self.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:aViewController animated:YES];
self.hidesBottomBarWhenPushed=NO;
Run Code Online (Sandbox Code Playgroud)

所以基本上hidesBottomBarWhenPushed = YES,然后推送你的视图控制器然后hidesBottomBarWhenPushed = NO; 这就像一个魅力.

由于涡流和他的岗位在这里


Bru*_*lho 5

接受的答案对我来说有问题.

我的应用程序有一个深度为三个UIViewController的导航.

  • FirsViewController显示的是UITabBar.(正确)
  • FirsViewController推送SecondViewController,而SecondViewController不显示UITabBar.(正确)
  • SecondViewController推送了ThirdViewController,而ThirdViewController显示了UITabBar.(不正确的)
  • ThirdViewController弹出到SecondViewController,SecondViewController显示为UITabBar.(不正确的)
  • SecondViewController弹出到FirstViewController,FirstViewController显示UITabBar.(正确)

我的解决方案是设置UINavigationControllerDelegate的委托

迅速:

self.navigationController?.delegate = self
Run Code Online (Sandbox Code Playgroud)

Objective-C的:

self.navigationController.delegate = self;
Run Code Online (Sandbox Code Playgroud)

然后实现以下委托方法

迅速:

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

}
Run Code Online (Sandbox Code Playgroud)

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;

}
Run Code Online (Sandbox Code Playgroud)

希望它有所帮助.