将 UINavigationController 添加到 UITabBarController,而不在所有视图中显示标签栏
Add UINavigationController to UITabBarController without Tab Bar showing up in all views
我目前有带导航控制器的标签栏控制器,如 。
因此,标签栏显示在每个视图下方。
有没有办法使用 Storyboard 在不直接连接到标签栏控制器的连续屏幕上隐藏标签栏。
当前流程如图所示:
所需导航示例
例如,"Second View" 应该与导航控制器一起显示,因为它是标签栏控制器的直接 child。
但是,"Third View" 和 "Fourth View" 应该只有导航控制器(没有标签栏):
实际(带标签栏)与预期(期望的结果是没有标签栏的视图):
Un-suggested解决方案
获得所需流程的一种可能方法是创建导航控制器,然后将其连接到选项卡栏控制器。然而,Apple 不推荐将此作为 UI 模式(Apple 文档建议使用上述方法),并导致几个细微的错误:
- 无法再在选项卡栏控制器中重新排列选项卡,因为它们消失了
- 无法从 Storyboard
为 "Second View" 设置导航标题
- Tab Bar Controller 的 Editor > Embed in > Navigation Controller 是灰色的(因为这不是推荐的做法),所以你必须手动创建它
UIViewController
有一个 属性 hidesBottomBarWhenPushed
。在 ThirdViewController
和 FourthViewController
的 viewDidLoad
中将其设置为 true
。
更新
您当前的视图控制器层次结构完全没问题。不要将其更改为其他任何内容。
更新 2
你是对的 viewDidLoad
不够好。使用 init?(coder:)
.
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
hidesBottomBarWhenPushed = true
}
或者在 Interface Builder 中设置一个标志。
我目前有带导航控制器的标签栏控制器,如
因此,标签栏显示在每个视图下方。
有没有办法使用 Storyboard 在不直接连接到标签栏控制器的连续屏幕上隐藏标签栏。
当前流程如图所示:
所需导航示例
例如,"Second View" 应该与导航控制器一起显示,因为它是标签栏控制器的直接 child。
但是,"Third View" 和 "Fourth View" 应该只有导航控制器(没有标签栏):
实际(带标签栏)与预期(期望的结果是没有标签栏的视图):
Un-suggested解决方案
获得所需流程的一种可能方法是创建导航控制器,然后将其连接到选项卡栏控制器。然而,Apple 不推荐将此作为 UI 模式(Apple 文档建议使用上述方法),并导致几个细微的错误:
- 无法再在选项卡栏控制器中重新排列选项卡,因为它们消失了
- 无法从 Storyboard 为 "Second View" 设置导航标题
- Tab Bar Controller 的 Editor > Embed in > Navigation Controller 是灰色的(因为这不是推荐的做法),所以你必须手动创建它
UIViewController
有一个 属性 hidesBottomBarWhenPushed
。在 ThirdViewController
和 FourthViewController
的 viewDidLoad
中将其设置为 true
。
更新
您当前的视图控制器层次结构完全没问题。不要将其更改为其他任何内容。
更新 2
你是对的 viewDidLoad
不够好。使用 init?(coder:)
.
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
hidesBottomBarWhenPushed = true
}
或者在 Interface Builder 中设置一个标志。