推/回时隐藏/显示标签栏。迅速
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 防止标签栏隐藏?