簡體   English   中英

在ViewController循環中隱藏/顯示TabBar

[英]Hide/Show TabBar in ViewController loops

情況

我在TabBarController嵌入了幾個ViewControllers (都帶有NavigationBar )。 我有一個特定的ViewControllerVC1 ),我不想顯示TabBar 從那里可以轉到另一個特定的ViewControllerVC2 ),在其中需要再次顯示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 ,依此類推。

問題

  1. 一旦將VC2VC1中推入兩次, TabBar總是被隱藏。
  2. 當您單擊“后退”按鈕從VC1返回到VC2時TabBar始終處於隱藏狀態。

在此處輸入圖片說明

僅自定義VC1

override func viewWillAppear(animated: Bool) {
    self.tabBarController?.tabBar.hidden = true
}

override func viewWillDisappear(animated: Bool) {
    self.tabBarController?.tabBar.hidden = false
}

它是更簡單的架構

不要將邏輯放在viewWillDisappearprepareForSegue因為您不知道即將呈現的視圖控制器需要什么樣的行為。 將邏輯放在viewWillAppear

讓每個ViewController處理自己想要的行為,不要試圖預期目的地想要什么。 特別是因為您並不總是知道viewWillDisappearprepareForSegue的原因是什么-因此您無法做出相應的反應。

嘗試在所需的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM