如何在按下时隐藏标签栏并在返回时显示标签栏

时间:2016-02-16 06:16:32

标签: swift uiviewcontroller hide segue tabbar

我想要

查看控制器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对我没有意义。但是,我无法想象我应该做些什么来解决这个问题。有什么建议?感谢。

enter image description here

4 个答案:

答案 0 :(得分:8)

隐藏标签栏的方法是 - 在您推动下一个视图控制器的位置执行此操作:

self.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(controllerToPush, animated: true) 
self.hidesBottomBarWhenPushed = false

这将确保为推出的视图隐藏标签栏,当您弹回时,该栏将再次显示。没有后退按钮逻辑,没有viewDidLoad或类似,没有别的。这应该足够了。

同样适用于objective-c

现在(21/02/2018)您还可以检查故事板 中的选项,了解您不希望显示底栏的每个控制器即可。这将有助于清理代码,您无需在控制器中设置任何内容。enter image description here

答案 1 :(得分:6)

修改That解决了问题。

显示标签栏是有道理的,因为当从VC2点回到VC3时,没有任何东西告诉VC3隐藏其标签栏。

我认为你在这里有2个解决方案(但未经过任何测试):

  1. 您可以尝试执行this guy did之类的操作。他在BackButtonPressed Handler中添加了hidesBottomBarWhenPushed逻辑。
  2. 在VC3中,self.tabBarController?.tabBar.hidden = trueViewDidLoad
  3. viewWillAppear

答案 2 :(得分:2)

@stan几乎是正确的答案。正如他提到的,如果要隐藏底部的小节,则需要设置为googleapiclient.discovery。但是,应按如下所示在控制器上进行设置。

hidesBottomBarWhenPushed = true

答案 3 :(得分:0)

在要隐藏的控制器中设置hidesBottomBarWhenPushed = true

用于隐藏放入prepare for segue的所有控制器

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    segue.destination.hidesBottomBarWhenPushed = true
}