[英]can't update navigationbar when popping to root view controller
我有一个UITabBar
。 在一个选项卡中是UINavigationController
。 假设堆栈中的第二个或第三个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
可见? 这似乎很客气。
您应该override
rootViewController
的viewWillAppear
并从那里override
setNavigationBarHidden
。 navigationController
在viewDidDisappear
处为nil
,因为它已从导航堆栈中弹出。
如果其他人看到了,我不知道为什么当popToRootViewController()
时,在viewWillDisappear
之前将self.navigationController
的引用设置为nil,但是我发现的解决方法只是存储您自己的引用。
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)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.