我正在尝试使用Xcode 11 beta 6和iOS 13 beta 8构建我的应用程序,但是一旦它开始运行,它将引发此错误:
由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“ UIApplication上名为-statusBar或-statusBarWindow的应用程序:由于不再有状态栏或状态栏窗口,因此必须更改此代码。改为在窗口场景上使用statusBarManager对象。'
什么是窗口场景?如何使用statusBarManager
?
而且我不确定这是否相关,但是我没有使用任何SwiftUI
。
答案 0 :(得分:4)
您需要添加以下扩展名以访问statusbarview:
extension UIApplication {
var statusBarUIView: UIView? {
if #available(iOS 13.0, *) {
let tag = 38482458385
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
}
}
答案 1 :(得分:0)
要在Swift 5+和iOS 13+中访问StatusBar
需要用 statusBarManager 替换-satusBar或-statusWindow。
if #available(iOS 13.0, *) {
let statusBar = UIView(frame: UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero)
statusBar.backgroundColor = .appNavigationThemeColor
// statusBar.tag = 100
UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.addSubview(statusBar)
} else {
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = .appNavigationThemeColor
}
}
希望会有所帮助:)