停止在iOS 13中更改状态栏

Rob*_*ert 6 statusbar swift ios13

我的应用程序中已有一个明暗主题。我还支持iOS 13暗模式,问题是,即使选择了应用的亮或暗模式,更改iOS主题也会导致更改状态栏颜色,因此当ios暗模式打开时,状态栏在我的应用中的浅色主题。我试图通过此代码块来阻止它,但是在我的情况下它不起作用:

override var preferredStatusBarStyle: UIStatusBarStyle {
    switch Appearance.theme {
    case .dark:
        return .lightContent
    case .light:
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    case .apple:
        return .default
    }
}
Run Code Online (Sandbox Code Playgroud)

我在他的分割视图控制器中添加了它,在每个控制器中也添加了它,但是没有任何变化。有谁知道如何解决?我ASLO有同样的问题UITabbarUISegmentedControl

我应该以某种方式说,当选择我的应用中的明暗模式时,更改iOS主题应该会影响应用程序元素(状态栏,标签栏,UISegmentedControl)

非常感谢

Rou*_*beh 3

您可以使用overrideUserInterfaceStyle强制控制器采用 中的特定样式iOS13

为了解决你的问题,你的代码应该是这样的:

override var preferredStatusBarStyle: UIStatusBarStyle {
    switch Appearance.theme {
    case .dark:
        return .lightContent
    case .light:
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    case .apple:
        return .default
    }
}


override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 13.0, *) {
         switch Appearance.theme {
         case .dark:
             overrideUserInterfaceStyle = .dark
         case .light:
             overrideUserInterfaceStyle = .light
         case .apple:
             overrideUserInterfaceStyle = .unspecified
         }
     }
}
Run Code Online (Sandbox Code Playgroud)