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