iOS仅在NavigationController根目录上显示标签栏

时间:2019-05-16 13:29:38

标签: ios objective-c uinavigationcontroller uitabbarcontroller

视图控制器设置如下:

UITabBarController
  - Tab 1
    - UINavigationController
      - UITableViewController
        - select row pushes UIViewController (self.navigationController pushViewController)
          - select button pushes another UIViewController
  - Tab 2
    - UIViewcontroller

我的AppDelegate应该反映出上面的设置,并且看起来像这样:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
  UITabBarController*     tabBarController           = [[UITabBarController     alloc] init];
  UITableViewController*  myListController           = [[MyListController       alloc] init];
  myListController.hidesBottomBarWhenPushed          = YES;
  UINavigationController* navigationControllerMyList = [[UINavigationController alloc] initWithRootViewController:myListController];
  navigationControllerMyList.tabBarItem              = [[UITabBarItem           alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0];

  UIViewController* simpleViewController             = [[SimpleViewController   alloc] init];
  simpleViewController.tabBarItem                    = [[UITabBarItem           alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:0];
  tabBarController.viewControllers                   = @[ navigationControllerMyList , simpleViewController ];

  self.window                    = [[UIWindow alloc] init];
  self.window.rootViewController = tabBarController;
  [self.window makeKeyAndVisible];

  return YES;
}

我面临的问题是,一旦我在表视图控制器中选择了一行,通过设置myListController.hidesBottomBarWhenPushed = YES;

,标签栏就会按预期隐藏

UINavigationController上,向后导航,选项卡栏不再显示,但我希望再次显示。但前提是我是导航控制器的根。

我尝试在tabBar.hidden中将NO设置为UITableViewController,但是一旦导航回去,tabBar始终可见。

- (void)viewWillAppear:(BOOL)animated
{
  [super viewWillAppear:animated];
  self.tabBarController.tabBar.hidden = NO;
}

我也看到了this的答案,基本上说我必须自己管理每个视图控制器中的选项卡。我尽量避免这种情况。

要正确隐藏和显示仅在导航控制器根目录下的标签栏,我会错过什么?

1 个答案:

答案 0 :(得分:0)

在将任何VC推入导航控制器之前,只需添加一行NavigationController?.hideBottomBarWhenPushed = true

请勿复制粘贴,可能会出现语法错误,请尝试输入xcode会给出建议。