使用 UIStatusBarManager 更改状态栏背景颜色
Posted
技术标签:
【中文标题】使用 UIStatusBarManager 更改状态栏背景颜色【英文标题】:Change status bar background color using UIStatusBarManager 【发布时间】:2019-11-05 12:37:46 【问题描述】:之前在 Xcode 10 和 swift 5 上,我曾经如下更改状态栏颜色:-
if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor))
statusBar.backgroundColor = #colorLiteral(red: 0, green: 0.7156304717, blue: 0.9302947521, alpha: 1)
现在在 Xcode 11 和 Swift 5.1 上出现以下错误:-
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“在 UIApplication 上调用 -statusBar 或 -statusBarWindow 的应用程序:必须更改此代码,因为不再有状态栏或状态栏窗口。在窗口场景中使用 statusBarManager 对象。'
有什么建议吗?
【问题讨论】:
这个问题与***.com/questions/56651245/…重复 【参考方案1】:试试这个:
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
【讨论】:
我到处都能看到这个答案。它甚至有效吗?标签值从何而来? 是的,它就像一个魅力,标签的价值是你可以决定的......我们检查这个价值,不要多次在子视图上添加视图 我使用 Xamarin Forms,这对我有用,但在调用viewWillAppear
之前,keyWindow
不可用。所以我在那里使用它而不是FinishedLaunching
这不是使用新的 UIStatusBarManager 也不是来自 iOS 13 的 window.windowScene(如 Xcode 警告中所建议的那样),但诀窍是有效的!!!,以上是关于使用 UIStatusBarManager 更改状态栏背景颜色的主要内容,如果未能解决你的问题,请参考以下文章