移动到下一个 UIViewController 时保留 UINavigationController 但隐藏 UITabBarController

Posted

技术标签:

【中文标题】移动到下一个 UIViewController 时保留 UINavigationController 但隐藏 UITabBarController【英文标题】:Keep the UINavigationController while moving to next UIViewController but hide UITabBarController 【发布时间】:2016-02-07 07:37:30 【问题描述】:

我有一个嵌入在UINavigationControllerUITabBarController 中的UITableViewController

当我选择一行时,我想在UINavigationController 中打开我的UIViewController,而不是在UITabBarController 中。

当我从单元格创建segueInterface Builder 中的UIViewController 时,我选择Show (eg. Push)

问题在于它还保留了UITabBarController

然后我尝试了其他类型的segue,但没有一个显示UINavigationController

我想过在viewDidLoad() 中添加self.tabBarController?.tabBar.hidden = true 并覆盖willMoveToParentViewController

override func willMoveToParentViewController(parent: UIViewController?) 
    super.willMoveToParentViewController(parent)

    if parent == nil 
        self.tabBarController?.tabBar.hidden = false
    

它工作正常,除非我进行驱动转换(从边缘平移返回父视图控制器)。

如何正确地做到这一点?

【问题讨论】:

【参考方案1】:

UIViewController 有一个名为hidesBottomBarWhenPushed 的属性,它将完全按照您的意愿进行操作。

只需设置tableViewController.hidesBottomBarWhenPushed = true,您就可以开始了!

见Apple's documentation

编辑:如果您使用 Interface Builder 构建视图,实际上有一个可以单击的复选框,因此您不必以编程方式设置它。

【讨论】:

是的,我刚刚看到了。调用它的最佳方法是在父视图控制器中覆盖prepareForSegue。例如在孩子的ViewDidLoad 中调用它不起作用。谢谢。 哦——如果你在 Interface Builder 中有视图,属性检查器中实际上有一个复选框。选择视图控制器,您可以在此屏幕截图中看到复选框:imgur.com/wBHDoca

以上是关于移动到下一个 UIViewController 时保留 UINavigationController 但隐藏 UITabBarController的主要内容,如果未能解决你的问题,请参考以下文章

键盘存在时 UIViewController 向上移动

当使用 Swift 出现键盘时如何向上移动 UIViewController 的内容

如何在将 UIViewController 呈现给自定义时更改默认转换

按 Enter 时防止移动到下一条记录?

mapView 上的点在移动到下一个选项卡时消失

在 UIViewController 中移动滚动视图时遇到问题