我想在iOS 13中更改状态栏透明度。
let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow?.alpha = 0.5
当我尝试这样做时,应用程序崩溃了(线程1:信号SIGABRT)。
我想在iOS 13中更改状态栏透明度。
let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow?.alpha = 0.5
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
}
statusBarUIView
变量更改颜色和透明度。 - Akshar DarjikeyWindow
在 iOS 13 中已被弃用。 - Parth AdrojaiOS 13 系统进程渲染状态栏,应用程序无法更改。 (来源:在 WWDC 2019 实验室中与 UIKit 工程师交谈。)
您可以在 Apple Books 应用程序中看到这一点,在 iOS 12 的深色模式下,该应用程序曾经会使状态栏变暗,但在 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
}
另外,请查看文章iOS 13如何更改状态栏颜色?
最后,您仍然可以使用以下内容更改状态栏样式:
override var preferredStatusBarStyle : UIStatusBarStyle {
return UIStatusBarStyle.lightContent
//return UIStatusBarStyle.default // Make dark again
}