我有UITabBar
。在一个标签中是UINavigationController
。假设堆栈中的第2个或第3个UIViewController
具有:
class ChildVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: false)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: false)
}
}
如果单击当前选项卡,它将在导航控制器上popToRootViewController()
。问题是,在我当前标签的viewWillDisappear(:)
中,navigationController
为零。所以navigationBar仍然是隐藏的。
处理此问题的正确方法是什么?我是否应该在根视图控制器的viewDidAppear
中将导航栏设置为可见?这看起来很糟糕。
答案 0 :(得分:0)
您应该override
viewWillAppear
中的rootViewController
和setNavigationBarHidden
。 navigationController
nil
位于viewDidDisappear
,因为它已从导航堆栈中弹出。
答案 1 :(得分:0)
如果有其他人看到这一点,我不知道为什么self.navigationController
viewWillDisappear
的引用在您popToRootViewController()
class ChildVC: UIViewController {
private weak var navCtrl: UINavigationController?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navCtrl = navigationController
navCtrl?.setNavigationBarHidden(true, animated: false)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navCtrl?.setNavigationBarHidden(false, animated: false)
}
}
之前设置为nil,但我找到的解决方法只是存储您的自己提到它。
data[2].score