如何在iOS 13中更改状态栏Alpha?

时间:2019-07-17 20:36:27

标签: ios swift statusbar alpha ios13

我想在iOS 13中更改状态栏Alpha。

foo

当我尝试此操作时,应用程序崩溃(线程1:信号SIGABRT)。

3 个答案:

答案 0 :(得分:6)

状态栏由iOS 13上的系统进程(不在应用程序进程中)呈现,因此应用程序无法更改此状态。 (来源:在WWDC 2019实验室与UIKit工程师交谈。)

您可以在Apple Books应用程序中看到此内容,该应用程序过去曾在iOS 12上以暗模式将状态栏变暗,但在iOS 13上却没有。

答案 1 :(得分:6)

  

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

您可以参考以下答案来解决崩溃问题。

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
    }

这些提到的解决方案对我有用。

答案 2 :(得分:1)

我有一个自定义解决方案,用于更改iOS 13及更低版本上的状态栏。这是这样做的方法:

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

此外,请查看文章iOS 13 How to Change StatusBar Color?

最后一件事,您仍然可以通过以下方式更改状态栏样式:

 override var preferredStatusBarStyle : UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
    //return UIStatusBarStyle.default   // Make dark again
}