我将hidesBottomBarWhenPushed = true设置为我的一个UIViewController(称为ViewControllerA),它被推送到我的UINavigationController堆栈。当我在ViewControllerA上推一个新的ViewController时,我也选择显示bottomBar。因此我有:
class ViewControllerA: UIViewController {
override func viewWillDisappear(animated: Bool) {
self.hidesBottomBarWhenPushed = false
}
override func viewWillAppear(animated: Bool) {
self.hidesBottomBarWhenPushed = true
}
一切正常。
当我按下ViewControllerA时,底栏会隐藏。 当我推送任何其他ViewController时,底栏显示。
但是,当我在导航堆栈中向后移动时(也就是点击UIBarButtonItemBack按钮),当我弹出导航堆栈以显示ViewControllerA时,我无法隐藏bottomBar。
我错过了什么?谢谢!
答案 0 :(得分:1)
知道了!这是有效的:
class ViewControllerCustom: UIViewController {
init() {
self.hidesBottomBarWhenPushed = true
}
override func viewDidAppear(animated: Bool) {
self.hidesBottomBarWhenPushed = false
}
}
然后在每个UIViewController的BarButtonItemBack的自定义实现中按下我检查以查看是否有前一个视图控制器(将弹出需要隐藏标签栏)。当然,我把它抽象成一个通用函数,所以我不需要重复代码,但这里是概念。感谢帮助解决这个问题!
func barButtonItemBackPressed(button: UIButton) {
var viewControllers = self.navigationController!.viewControllers as! [UIViewController]
if ((viewControllers[viewControllers.count - 2]).isKindOfClass(ViewControllerCustom.self)) {
(viewControllers[viewControllers.count - 2] as! ViewControllerCustom).hidesBottomBarWhenPushed = true
}
self.navigationController?.popViewControllerAnimated(true)
}
答案 1 :(得分:0)
我相信此属性的预期用途是在推送时隐藏栏。因此,当您的视图控制器出现在最顶层的视图控制器弹出后,它不会被推入堆栈,因此它不会更改标签栏的外观。
这为您提供了两个选项:
1)保留所有视图控制器的底栏。输入文本时,键盘覆盖底栏。
2)隐藏View Controller A的底栏,以及在A顶部推送的任何其他视图控制器。