簡體   English   中英

將狀態欄設置為淺色內容並動態顯示/隱藏(帶UINavigationControllers的UITabBarController)

[英]Set status bar to light content and dynamically show/hide (UITabBarController with UINavigationControllers)

我有一個UITabBarController作為根視圖控制器。 每個選項卡都有一個嵌入在導航控制器內部的視圖控制器。 我的導航欄是深色的,所以我需要將狀態欄設置為.lightContent。 我還需要動態隱藏狀態欄。

如果我將“查看基於控制器的狀態欄外觀”設置為“否”,我可以將狀態欄正確設置為“.lightContent”,但我無法動態隱藏狀態欄。

如果我將“查看基於控制器的狀態欄外觀”設置為“是”,則狀態欄將僅設置為“.lightContent”(如果導航欄不存在)。

這是我在每個視圖控制器中用來顯示或隱藏狀態欄的內容:

var shouldHideStatusBar: Bool = false {
    didSet { self.setNeedsStatusBarAppearanceUpdate() }
}
override var prefersStatusBarHidden: Bool { return shouldHideStatusBar }
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { return .slide }
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

我也嘗試過:

navigationController?.navigationBar.barStyle = .black

必須有一些我缺少的東西,以便將狀態欄設置為.lightContent,並仍然能夠動態顯示和隱藏狀態欄。

導致使用棄用的方法:

UIApplication.shared.setStatusBarHidden(true, with: .slide)

不理想,但有效。 希望有人有一個解決方案,而不依賴於棄用的方法。

您必須通過視圖層次結構向上冒泡這些值。 例如,您tabBarController應該問其selectedViewController什么其價值prefersStatusBarHidden然后你navigationController需要問其topViewController什么其價值prefersStatusBarHidden是。 當這樣prefersStatusBarHidden是呼吁tabBarController其傳遞回最頂部的視圖控制器希望與狀態欄做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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