![](/img/trans.png)
[英]UINavigationController, how to hide tabbar in second level viewController then show tabbar in third level viewController
[英]Hide/Show TabBar in ViewController loops
情況 :
我在TabBarController
嵌入了幾個ViewControllers
(都帶有NavigationBar
)。 我有一個特定的ViewController
( VC1 ),我不想顯示TabBar
。 從那里可以轉到另一個特定的ViewController
( VC2 ),在其中需要再次顯示TabBar
。
我的解決方案 :
VC1
默認將self.hidesBottomBarWhenPushed
設置為true
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
self.hidesBottomBarWhenPushed = false
}
override func viewWillDisappear(animated: Bool) {
self.hidesBottomBarWhenPushed = true
}
VC2
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
self.hidesBottomBarWhenPushed = true
}
override func viewWillDisappear(animated: Bool) {
self.hidesBottomBarWhenPushed = false
}
到現在為止還挺好。 這似乎可行 ,但是您可以從VC2中推送另一個VC1 (具有不同內容的同一控制器),當然也可以從VC1中再次推送另一個VC2 ,依此類推。
問題 :
TabBar
總是被隱藏。 TabBar
始終處於隱藏狀態。 僅自定義VC1
override func viewWillAppear(animated: Bool) {
self.tabBarController?.tabBar.hidden = true
}
override func viewWillDisappear(animated: Bool) {
self.tabBarController?.tabBar.hidden = false
}
它是更簡單的架構
不要將邏輯放在viewWillDisappear
或prepareForSegue
因為您不知道即將呈現的視圖控制器需要什么樣的行為。 將邏輯放在viewWillAppear
。
讓每個ViewController處理自己想要的行為,不要試圖預期目的地想要什么。 特別是因為您並不總是知道viewWillDisappear
或prepareForSegue
的原因是什么-因此您無法做出相應的反應。
嘗試在所需的VC中更改屬性:
self.navigationController.toolbarHidden = YES;
在viewWillApear中嘗試這些代碼以進行隱藏或取消隱藏,它將可以正常工作。
對於VC1:-在此您要始終隱藏然后添加此代碼
override func viewWillAppear(animated: Bool) {
self.tabBarController?.tabBar.hidden = true
}
對於VC2:-在此始終顯示,然后添加此代碼
override func viewWillAppear(animated: Bool) {
self.tabBarController?.tabBar.hidden = false
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.