Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:更改iOS 13的状态栏颜色_Ios_Swift_Statusbar - Fatal编程技术网

Swift:更改iOS 13的状态栏颜色

Swift:更改iOS 13的状态栏颜色,ios,swift,statusbar,Ios,Swift,Statusbar,对于ios 13,我无法设置状态栏的文本颜色。如何获取statusBarManager的视图?如何仅更改文本颜色 由于: 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UIApplication上调用了-statusBar或-statusBarWindow的应用程序:必须更改此代码,因为不再存在状态栏或状态栏窗口。改用窗口场景上的statusBarManager对象。” 我当前的代码: func setStatusBarTextCol

对于ios 13,我无法设置状态栏的文本颜色。如何获取statusBarManager的视图?如何仅更改文本颜色

由于:

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

我当前的代码:

func setStatusBarTextColor(color:UIColor){
如果可用(iOS 13.0,*){
//iOS 13怎么办??
}否则{
如果让statusBar=UIApplication.shared.value(forKey:“statusBar”)作为UIView{
statusBar.setValue(颜色,forKey:“foregroundColor”)
}
}
}

我已经找到了,但这不是我想要的更新答案

要更改状态栏上的文本颜色,只需设置样式。(您不需要很多选项,状态栏中的文本颜色可以是白色或黑色)

如果要在视图控制器级别设置状态栏样式,请执行以下步骤:

  • 如果只需要在UIViewController级别设置状态栏样式,请在.plist文件中将
    UIViewControllerBasedStatusBarAppearance设置为YES
  • 在视图控制器中重写
    preferredStatusBarStyle
  • 如果要更改iOS 13的状态栏背景,请使用以下代码:

    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
    }}
    

    状态栏中文本的颜色从未由您决定;你所做的总是错的。使用顶级视图控制器覆盖
    preferredStatusBarStyle
    。您有两种选择,
    .lightContent
    .darkContent
    ,您应该使用这两种选择,因为您希望支持明暗模式。

    IOS 13.0和XCode 11.0,Swift 5.0 100%工作

        if #available(iOS 13.0, *) {
    
    
           let statusBar1 =  UIView()
           statusBar1.frame = UIApplication.shared.keyWindow?.windowScene?.statusBarManager!.statusBarFrame as! CGRect
           statusBar1.backgroundColor = UIColor.black
    
           UIApplication.shared.keyWindow?.addSubview(statusBar1)
    
        } else {
    
           let statusBar1: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
           statusBar1.backgroundColor = UIColor.black
        }
    

    对于iOS 13,您可以这样使用:

       let statusBar =  UIView()
       statusBar.frame = UIApplication.shared.statusBarFrame
       statusBar.backgroundColor = UIColor.red
       UIApplication.shared.keyWindow?.addSubview(statusBar)
    

    可能重复。@chumps52我不重复,因为我不能只更改文本颜色。.他不想更改背景,但要更改状态栏的文本是的,但请阅读他编写的代码,这是关于背景的。我将更新我的答案,并为iOS 13中不推荐使用的文本颜色
    keyWindow
    statusBarFrame
    添加答案。
    keyWindow
    在iOS 13中不推荐使用。