如何在 iOS 13 中更改状态栏 Alpha?
Posted
技术标签:
【中文标题】如何在 iOS 13 中更改状态栏 Alpha?【英文标题】:How can I change Status Bar Alpha in iOS 13? 【发布时间】:2019-11-26 18:05:12 【问题描述】:我想在 ios 13 中更改状态栏 Alpha。
let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
statusBarWindow?.alpha = 0.5
当我尝试这个时,应用程序崩溃(线程 1:信号 SIGABRT)。
【问题讨论】:
据我所知,你不能这样做。状态栏可以是黑色或白色。您正在尝试访问一个私有 API,如果您提交到 App Store,我认为 Apple 不会允许该 API。 【参考方案1】:由于未捕获的异常而终止应用程序 '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
这些提到的解决方案对我有用。
【讨论】:
您只是在 iOS 13 的情况下添加空 UIView,这将如何与 StatusBar 特定属性一起使用,例如。 “前景颜色”? 这里我只提供了崩溃的解决方案,我想我们会改变颜色,它是statusBarUIView
var的alpha。
@AksharDarji keyWindow
在 iOS 13 中已弃用。
@ParthAdroja 是的。但是,我们已经在 beta 中进行了测试,当时它运行良好。无论如何,如果你想使用它,你可以查看***.com/a/57169802/2677134 或者你可以在这里贡献同样的内容。
您只是在 iOS 13 的情况下添加空 UIView【参考方案2】:
状态栏是由 iOS 13 上的系统进程(在应用程序进程之外)呈现的,因此应用程序无法更改它。 (来源:在 WWDC 2019 实验室与 UIKit 工程师交谈。)
您可以在 Apple Books 应用中看到这一点,该应用曾在 iOS 12 上将状态栏调暗为暗模式,但在 iOS 13 上不会发生这种情况。
【讨论】:
【参考方案3】:我有一个自定义解决方案,用于在 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
【讨论】:
以上是关于如何在 iOS 13 中更改状态栏 Alpha?的主要内容,如果未能解决你的问题,请参考以下文章