簡體   English   中英

iOS 13 狀態欄樣式

[英]iOS 13 status bar style

我想在 iOS 13 的每個 ViewController 級別上更改狀態欄樣式。到目前為止,我沒有任何運氣。
我在 info.plist UIUserInterfaceStyle定義為Light (因為我不想支持暗模式)並將UIViewControllerBasedStatusBarAppearance設置為true preferredStatusBarStyle在我的 ViewController 上被調用,但完全被忽略。 UIUserInterfaceStyle似乎總是覆蓋 VC 首選項。 如何讓每個 ViewController 狀態欄樣式在 iOS 13 上工作? 還是不再支持?

iOS 13.2,斯威夫特 5.1

對我來說,之前提到的解決方案沒有任何效果。 5 小時后,我結束了modalPresentationCapturesStatusBarAppearance flag 。

    destinationNavigationController.modalPresentationCapturesStatusBarAppearance = true
    sourceViewController.present(destinationNavigationController, animated: animated, completion: nil)

呈現的VC 中調用了這個preferredStatusBarStyle之后。

override var preferredStatusBarStyle: UIStatusBarStyle {
    if #available(iOS 13.0, *) {
        if traitCollection.userInterfaceStyle == .light {
            return .darkContent
        } else {
            return .lightContent
        }
    } else {
        return .lightContent
    }
}

我在 iOS13 上遇到了同樣的問題,而在 iOS12 上我的應用程序沒問題。 我有一個包含 3 個 NavigationBarController 的 TabBarController,並且我從以前的 ViewController 中呈現 TabBarController。 我通過在演示時將 .modalPresentationStyle 設置為 .fullScreen 來修復它:

tabbarController.modalPresentationStyle = .fullScreen

也許它會以某種方式幫助你......

在 iOS13 中,UIStatusBarStyle 現在有一個 .darkContent 選項。 對於黑色文本,使用這個(而不是 .default)作為 preferredStatusBarStyle。

就我而言,我遇到了類似的問題,不正確的UIStatusBarStyle 對於我的應用程序中的某些視圖控制器,我需要設置一個深色狀態欄樣式而忽略當前系統顏色模式。 問題是我使用了.default值,但在 iOS 13 中它會根據上下文發生變化。 這就是為什么我添加了一個小的解決方法來處理 iOS 12- 和 iOS 13+ 的情況。

private extension UIStatusBarStyle {

    static var darkContentWorkaround: UIStatusBarStyle {
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    }

}

我在使用導航控制器時在 iOS 13 上遇到了同樣的問題,我能夠使用更改狀態欄顏色

讓 navBarAppearance = UINavigationBarAppearance()

navigationBar.scrollEdgeAppearance = navBarAppearance

但問題是當我使用當前控制器時狀態欄沒有改變我在頂視圖控制器上使用了這個代碼

覆蓋 func viewDidAppear(_ 動畫:布爾){

    if #available(iOS 13, *)
    {
        let statusBar = UIView(frame: (UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame)!)
        statusBar.backgroundColor = UIColor.systemBackground
        UIApplication.shared.keyWindow?.addSubview(statusBar)
    }
}

您可以在“UIColor.systemBackground”中使用您的顏色

暫無
暫無

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

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