How can I change Status Bar Alpha in iOS 13?

前端 未结 3 2102
悲哀的现实
悲哀的现实 2020-12-18 07:25

I want to change the Status Bar Alpha in iOS 13.

let statusBarWindow = UIApplication.shared.value(forKey: \"statusBarWindow\") as? UIWindow
statusBarWindow?.         


        
相关标签:
3条回答
  • 2020-12-18 07:48

    The status bar is rendered by a system process (out of the app process) on iOS 13 so there is no way for an app to change this. (Source: speaking to UIKit engineers at the WWDC 2019 labs.)

    You can see this in the Apple Books app, which used to dim the status bar in its dark mode on iOS 12, but this does not happen on iOS 13.

    0 讨论(0)
  • 2020-12-18 07:51

    I have a custom solution for changing status bar on iOS 13 and below. Here is how to do that:

    if #available(iOS 13.0, *) {
       let app = UIApplication.shared
       let statusBarHeight: CGFloat = app.statusBarFrame.size.height
    
       let statusbarView = UIView()
       statusbarView.backgroundColor = UIColor.red
       view.addSubview(statusbarView)
    
       statusbarView.translatesAutoresizingMaskIntoConstraints = false
       statusbarView.heightAnchor
         .constraint(equalToConstant: statusBarHeight).isActive = true
       statusbarView.widthAnchor
         .constraint(equalTo: view.widthAnchor, multiplier: 1.0).isActive = true
       statusbarView.topAnchor
         .constraint(equalTo: view.topAnchor).isActive = true
       statusbarView.centerXAnchor
         .constraint(equalTo: view.centerXAnchor).isActive = true
    
    } else {
          let statusBar = UIApplication.shared.value(forKeyPath: 
       "statusBarWindow.statusBar") as? UIView
          statusBar?.backgroundColor = UIColor.red
    }
    

    Gist

    Also, check the article iOS 13 How to Change StatusBar Color?

    One last thing, you can still change statusbar style with :

     override var preferredStatusBarStyle : UIStatusBarStyle {
        return UIStatusBarStyle.lightContent
        //return UIStatusBarStyle.default   // Make dark again
    }
    
    0 讨论(0)
  • 2020-12-18 07:59

    Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'App called -statusBar or -statusBarWindow on UIApplication: this code must be changed as there's no longer a status bar or status bar window. Use the statusBarManager object on the window scene instead.'

    You can refer to the following answer to resolve your crash.

    var statusBarUIView: UIView? {
            if #available(iOS 13.0, *) {
                let tag = 38482458
                if let statusBar = self.keyWindow?.viewWithTag(tag) {
                    return statusBar
                } else {
                    let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
                    statusBarView.tag = tag
    
                    self.keyWindow?.addSubview(statusBarView)
                    return statusBarView
                }
            } else {
                if responds(to: Selector(("statusBar"))) {
                    return value(forKey: "statusBar") as? UIView
                }
            }
            return nil
        }
    

    These mentioned solutions worked for me.

    0 讨论(0)
提交回复
热议问题