Ios 使用UIStatusBarManager更改状态栏背景色

Ios 使用UIStatusBarManager更改状态栏背景色,ios,uikit,xcode11,swift5.1,Ios,Uikit,Xcode11,Swift5.1,在之前的Xcode 10和swift 5中,我曾按如下方式更改状态栏颜色:- if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView { if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) { statusBar.backgroundColor = #colorLiteral(red: 0, g

在之前的Xcode 10和swift 5中,我曾按如下方式更改状态栏颜色:-

if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
   if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
      statusBar.backgroundColor = #colorLiteral(red: 0, green: 0.7156304717, blue: 0.9302947521, alpha: 1)
   }
}
现在,在Xcode 11和Swift 5.1上,我得到以下错误:-

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UIApplication上调用了-statusBar或-statusBarWindow的应用程序:必须更改此代码,因为不再存在状态栏或状态栏窗口。改用窗口场景上的statusBarManager对象。”

有什么建议吗?

试试这个:

extension UIApplication {


class var statusBarBackgroundColor: UIColor? {
    get {
        return statusBarUIView?.backgroundColor
    } set {
        statusBarUIView?.backgroundColor = newValue
    }
}

class var statusBarUIView: UIView? {
    if #available(iOS 13.0, *) {
        let tag = 987654321

        if let statusBar = UIApplication.shared.keyWindow?.viewWithTag(tag) {
            return statusBar
        }
        else {
            let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
            statusBarView.tag = tag

            UIApplication.shared.keyWindow?.addSubview(statusBarView)
            return statusBarView
        }
    } else {
        if responds(to: Selector(("statusBar"))) {
            return value(forKey: "statusBar") as? UIView
        }
    }
    return nil
}}

这个问题与我一直看到的答案完全相同。它真的有用吗?标签的价值从何而来?是的,它就像一个符咒,标签的价值是你可以决定的。。。我们将该值检查为多次不在子视图上添加视图。我使用Xamarin表单,这对我很有效,但在调用
viewwillbeen
之前,
keyWindow
不可用。因此,我在那里使用它,而不是
FinishedLaunching
,这既不是使用新的UIStatusBarManager,也不是使用iOS 13中的window.windowScene(正如Xcode警告中所建议的那样),但这个技巧确实有效!!!,