[英]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.