推/回时隐藏/显示标签栏。迅速

Posted

技术标签:

【中文标题】推/回时隐藏/显示标签栏。迅速【英文标题】:hide / show tab bar when push / back. swift 【发布时间】:2016-05-27 09:50:28 【问题描述】:

回答: 在每个视图控制器中使用 self.tabBarController?.tabBar.hidden 而不是 hidesBottomBarWhenPushed 来管理视图控制器是否应该显示标签栏。

override func viewWillAppear(animated: Bool) 
    self.tabBarController?.tabBar.hidden = true/false
 

我想要

视图控制器 1:应该显示标签栏

视图控制器 2:应该显示标签栏

视图控制器 3:不应显示标签栏。

视图控制器 4:不应显示标签栏。

我写的

// prepareForSegue in view controller 1, 
    let upcoming = segue.destinationViewController as! viewcontroller3
    upcoming.hidesBottomBarWhenPushed = true

// in view controller 3,
    func clickOnButton(button: UIButton) 
        self.hidesBottomBarWhenPushed = false
        self.performSegueWithIdentifier("viewController2", sender: self)
        self.hidesBottomBarWhenPushed = true
    
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        if segue.identifier == "viewController2" 
            let upcoming = segue.destinationViewController as! viewController2
            upcoming.hidesBottomBarWhenPushed = false
        
    
// prepareForSegue in view controller 2
    let upcoming = segue.destinationViewController as! viewController4
    upcoming.hidesBottomBarWhenPushed = true

如果 1 -> 3 然后返回 1,则有效。

如果 1 -> 3 -> 2 然后回到 3 再回到 1,就可以了。

如果 2 -> 4,则返回 2,有效。

如果 1 -> 3 -> 2 -> 4 然后回到 2,标签栏不显示。想知道为什么。对 hidesBottomBarWhenPushed 的任何建议或一些解释,因为它让我很困惑

【问题讨论】:

您从 3 导航到 2 时看到底栏了吗? 【参考方案1】:

正如它的名字所暗示的,hiddenBottomBarWhenPushed 只在需要时隐藏底部栏,它不会取消隐藏底部栏。 您可以这样做以使其正常工作:

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(animated)
    self.tabBarController?.tabBar.hidden = true/false
 

或者简单地将self.tabBarController?.tabBar.hidden = true/false 放入prepareForSegue

但我不建议你这样做,因为如果bottomBar突然弹出会很奇怪,用户会认为他们突然回到rootViewController而不是他们。

用户应该始终知道他们在您的应用中的位置以及如何到达他们的下一个目的地。

【讨论】:

如果我在 viewWillAppear 中执行此操作,我没有看到弹出窗口。但是,如果我在 viewDidAppear 中执行此操作,我确实会看到弹出窗口。我之所以要在3和4中隐藏标签栏是因为3是1对1聊天,4是群聊。而且,我划掉了所有的 hidesBottomBarWhenPushed 并在每个视图控制器的 viewWillAppear 中使用 tabBar.hidden。 在 3 和 4 中隐藏标签栏是正常行为,但如果您要从 3 导航到 2 ,则显示标签栏可能不合适。顺便说一句,如果你在 viewWillAppear 的 2 中使用 tabBar.hidden,如果直接点击 tabBarItem 可能看不到 tabBar,所以最好把它放在 3 的 prepareForSegue 中。 对于 swift 4 : isHidden【参考方案2】:

在 ViewController 中添加此实现,以便在推送/弹出时隐藏/显示标签栏。它也适用于所有下一个推送的视图控制器。

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    if wilmove 
        hidesBottomBarWhenPushed = true
    
    wilmove = false


override func viewWillDisappear(_ animated: Bool) 
super.viewWillDisappear(animated)
if wilmove 
        hidesBottomBarWhenPushed = false
    
    wilmove = false


var wilmove = false
override func willMove(toParentViewController parent: UIViewController?) 
    super.willMove(toParentViewController: parent)
    wilmove = true
    if !isViewLoaded 
        hidesBottomBarWhenPushed = true
    

【讨论】:

【参考方案3】:

将 hidesBottomBarWhenPushed 属性添加到目标视图控制器,并设置为 true。

带有标识符的推送 VC 示例:

    let storyboard = UIStoryboard(name: STORYBOARD_NAME, bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: VC_IDENTIFIER) as! YourViewController
    vc.hidesBottomBarWhenPushed = true
    navigationController?.pushViewController(vc, animated: true)

【讨论】:

【参考方案4】:

这是我的两分钱。 斯威夫特 3/4/5:

方法一:(推荐)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "YourSegueIdentifier" 
        let destinationController = segue.destinationViewController as! YourViewController
        destinationController.hidesBottomBarWhenPushed = true // Does all the hide/show work.
    

方法二:

override func viewWillAppear(_ animated: Bool)  // As soon as vc appears
    super.viewWillAppear(true)
    self.tabBarController?.tabBar.isHidden = false


override func viewWillDisappear(_ animated: Bool)  // As soon as vc disappears
    super.viewWillDisappear(true)
    self.tabBarController?.tabBar.isHidden = true

【讨论】:

【参考方案5】:

斯威夫特 5

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

【讨论】:

以上是关于推/回时隐藏/显示标签栏。迅速的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SWRevealViewController 防止标签栏隐藏?

从 UITableViewController 推送到 UIViewController 时,底部标签栏消失并保持黑色

完全显示/隐藏标签栏控制器并使用空间

在需要时从视图控制器显示/隐藏标签栏

隐藏标签栏项目并对齐其他标签项目

如何在需要的地方显示和隐藏标签栏?