首页 > 解决方案 > iOS 仅在 NavigationController 根目录上显示标签栏

问题描述

视图控制器设置如下所示:

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.hiddenNOUITableViewController但是一旦我导航回来并且 tabBar 总是可见的。

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

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

我错过了什么才能正确隐藏和仅在导航控制器根目录显示标签栏?

标签: iosobjective-cuinavigationcontrolleruitabbarcontroller

解决方案


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

不要复制粘贴可能有语法错误,尝试输入 xcode 会给出建议。


推荐阅读