如何在按下时隐藏标签栏并在返回时显示标签栏
how to hide tab bar when push and show tab bar when back
我要
视图控制器 1:显示标签栏
视图控制器 2:显示标签栏
视图控制器 3:未显示标签栏。
我写了
// prepareForSegue in view controller 1,
let upcoming = segue.destinationViewController as! viewcontroller3
upcoming.hidesBottomBarWhenPushed = true
// prepareForSegue in view controller 3,
let upcoming = segue.destinationViewController as! viewcontroller2
self.hidesBottomBarWhenPushed = true
当我从视图控制器 1 转到视图控制器 3 时,标签栏没有显示。然后,我从视图控制器 3 转到视图控制器 2,显示了选项卡栏。 但是当我在视图控制器 2 中点击返回时,选项卡栏显示在视图控制器 3 中。 self.hidesBottomBarWhenPushed = true
对我来说没有意义。但是,我不知道我应该怎么做才能解决这个问题。有什么建议么?谢谢
编辑:That 解决了问题。
标签栏出现是有道理的,因为当从 VC2 单击返回到 VC3 时,没有任何内容告诉 VC3 隐藏其标签栏。
我认为你这里有 2 个解决方案(但还没有测试过):
- 您可以尝试做类似 this guy did 的事情。他在 BackButtonPressed 处理程序中添加了 hidesBottomBarWhenPushed 逻辑。
- 在 VC3 中,在
ViewDidLoad
或 viewWillAppear
中执行 self.tabBarController?.tabBar.hidden = true
隐藏标签栏的方法是 - 在你推动下一个视图控制器的地方这样做:
self.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(controllerToPush, animated: true)
self.hidesBottomBarWhenPushed = false
这将确保标签栏对于推送的视图是隐藏的,当您弹出时该栏将再次显示。没有后退按钮逻辑,没有 viewDidLoad 或类似的东西,没有别的。这应该够了。
同样适用于 objective-c
现在(2018 年 2 月 21 日)您还可以 在每个控制器的 故事板 中检查选项您不想显示底栏。这将有助于清理代码,并且您不需要在您推送的控制器中设置任何内容。
@stan 的答案几乎是正确的。正如他提到的,如果你想隐藏底栏,你想设置为 set hidesBottomBarWhenPushed = true
。但是,您应该在控制器上将其设置为按如下方式推送。
controllerToPush.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(controllerToPush, animated: true)
在要隐藏的控制器中设置hidesBottomBarWhenPushed = true
。
用于隐藏所有放入 prepare for segue
的控制器
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
segue.destination.hidesBottomBarWhenPushed = true
}
我要
视图控制器 1:显示标签栏
视图控制器 2:显示标签栏
视图控制器 3:未显示标签栏。
我写了
// prepareForSegue in view controller 1,
let upcoming = segue.destinationViewController as! viewcontroller3
upcoming.hidesBottomBarWhenPushed = true
// prepareForSegue in view controller 3,
let upcoming = segue.destinationViewController as! viewcontroller2
self.hidesBottomBarWhenPushed = true
当我从视图控制器 1 转到视图控制器 3 时,标签栏没有显示。然后,我从视图控制器 3 转到视图控制器 2,显示了选项卡栏。 但是当我在视图控制器 2 中点击返回时,选项卡栏显示在视图控制器 3 中。 self.hidesBottomBarWhenPushed = true
对我来说没有意义。但是,我不知道我应该怎么做才能解决这个问题。有什么建议么?谢谢
编辑:That 解决了问题。
标签栏出现是有道理的,因为当从 VC2 单击返回到 VC3 时,没有任何内容告诉 VC3 隐藏其标签栏。
我认为你这里有 2 个解决方案(但还没有测试过):
- 您可以尝试做类似 this guy did 的事情。他在 BackButtonPressed 处理程序中添加了 hidesBottomBarWhenPushed 逻辑。
- 在 VC3 中,在
ViewDidLoad
或viewWillAppear
中执行
self.tabBarController?.tabBar.hidden = true
隐藏标签栏的方法是 - 在你推动下一个视图控制器的地方这样做:
self.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(controllerToPush, animated: true)
self.hidesBottomBarWhenPushed = false
这将确保标签栏对于推送的视图是隐藏的,当您弹出时该栏将再次显示。没有后退按钮逻辑,没有 viewDidLoad 或类似的东西,没有别的。这应该够了。
同样适用于 objective-c
现在(2018 年 2 月 21 日)您还可以 在每个控制器的 故事板 中检查选项您不想显示底栏。这将有助于清理代码,并且您不需要在您推送的控制器中设置任何内容。
@stan 的答案几乎是正确的。正如他提到的,如果你想隐藏底栏,你想设置为 set hidesBottomBarWhenPushed = true
。但是,您应该在控制器上将其设置为按如下方式推送。
controllerToPush.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(controllerToPush, animated: true)
在要隐藏的控制器中设置hidesBottomBarWhenPushed = true
。
用于隐藏所有放入 prepare for segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
segue.destination.hidesBottomBarWhenPushed = true
}