【问题标题】:Pushing a UITableViewController from a tabBarController embedded view doesn't remove tab bar?从 tabBarController 嵌入式视图推送 UITableViewController 不会删除标签栏?
【发布时间】:2014-01-13 18:08:22
【问题描述】:

我有一个带有 4 个选项卡的选项卡栏控制器,每个选项卡都是它们自己的 UINavigationController,这就是你应该将选项卡栏和导航控制器嵌套在一起的方式。初始选项卡是一个 TableViewController 并按其应有的方式工作/显示。从 tableVC 我可以将标准视图控制器推送到导航控制器上:

[self.navigationController pushViewController:VC animated:YES];

它可以正常工作。

如果我尝试使用相同的方法将另一个 TableViewController 推送到导航上,它的工作方式相同,但初始标签栏不会像应有的那样被推离屏幕,它只是保持原位。

为什么即使我将新的 VC 推送到导航上,标签栏仍会留在屏幕上?

我已经测试了不同 TableVC 的多个实例,它只发生在表视图控制器上。

这是我正在使用的代码:

- (void)pushTableVC
{
    TestTableVC *tableVC = [[TestTableVC alloc] init];

    [self.navigationController pushViewController:tableVC animated:YES];
}

这会将新的表格视图推送到堆栈上,但来自父 VC 的标签栏保持在原位,不会像应有的那样被推送到屏幕之外。

【问题讨论】:

    标签: ios uinavigationcontroller uitabbarcontroller uitableview


    【解决方案1】:

    您应该在您正在推送的视图控制器上调用方法setHidesBottomBarWhenPushed: 以正确隐藏标签栏。

    UIViewController *viewController = [[UIViewController alloc] init];
    
    [viewController setHidesBottomBarWhenPushed:YES];
    
    [[self navigationController] pushViewController:viewController animated:YES];
    

    【讨论】:

    • 这对我有用!你知道为什么我必须为 TableVC 而不是任何其他类型的 VC 这样做吗?我只有标签栏没有被推到表格上的问题。再次感谢!
    • 这看起来很奇怪。无论您尝试推送到导航堆栈的视图控制器的类型如何,上述内容都应该有效,因为 UITableViewController 继承自 UIViewController,除非在幕后发生了我们不知道的事情?
    【解决方案2】:

    当您使用UITabBarController 时,标签栏始终停留在屏幕上,即使您将其他视图控制器推送到嵌入的UINavigationController 上也是如此。你会在任何实现了UITabBarController 的应用中看到这一点,除非他们实现了自定义行为来改变这一点。

    UINavigationController 包含UITabBar 上方的所有内容,但不包含UITabBar 本身,因此无法将其推送到屏幕外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      相关资源
      最近更新 更多