【问题标题】:how to hide tab bar when push and show tab bar when back如何在推送时隐藏标签栏并在返回时显示标签栏
【发布时间】:2016-05-27 07:03:11
【问题描述】:

我想要

视图控制器 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 对我来说没有意义。但是,我想不出我应该做些什么来解决这个问题。有什么建议?谢谢。

【问题讨论】:

标签: ios swift uiviewcontroller segue tabbar


【解决方案1】:

隐藏标签栏的方法是 - 在你推动下一个视图控制器的地方这样做:

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

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

同样适用于objective-c

现在(2018 年 2 月 21 日)您还可以在 故事板 为您不想显示底栏的每个控制器选中选项 。这将有助于清理代码,您无需在要从中推送的控制器中设置任何内容。

【讨论】:

  • 在即将被推送的控制器上设置属性如下 controllerToPush.hidesBottomBarWhenPushed = true self.navigationController?.pushViewController(controllerToPush, animated: true)
  • @btomtom5 我的示例实际上运行良好,这是故意放置在正在推送的控制器中
  • 嗯。但是位于导航控制器堆栈顶部的视图控制器是决定是否显示底部栏的视图控制器。将子 vc 添加到 navcontroller 的 viewcontroller 不应该对底部栏是否显示有任何影响。
【解决方案2】:

编辑That 解决了问题。

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

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

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

【讨论】:

  • stackoverflow.com/a/6751438/5737856 你给我的那个解决了我的问题。谢谢大佬
  • 太好了,将更新答案。很高兴它对你有用!
  • 顺便说一句,我遵循的是第一个答案,而不是第二个答案。第二个还是看不懂哈哈
  • 哈哈哈是的,我试图理解它,但也无法理解:)
  • 哈哈。我有另一个问题,但仍然与 hidesBottomBarWhenPushed 有关。太糊涂了,你介意看看我的问题。 stackoverflow.com/questions/35427102/…
【解决方案3】:

@stan 的答案几乎是正确的。正如他所提到的,如果您希望隐藏底部栏,则需要设置为设置hidesBottomBarWhenPushed = true。但是,您应该将其设置在要推送的控制器上,如下所示。

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2015-01-03
      • 2013-09-21
      • 1970-01-01
      相关资源
      最近更新 更多