在iOS 13中UIApplication.shared.statusBarFrame.height警告
在iOS 13.0中不建议使用“ statusBarFrame”:而是使用窗口场景的statusBarManager属性。
在iOS 13中如何在不使用不推荐使用的API的情况下获取状态栏的高度?
小智 25
试试吧,我试过了。
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
let height = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
Run Code Online (Sandbox Code Playgroud)
Jor*_*n H 20
如警告提示所示,您可以访问statusBarManager具有statusBarFrame属性的。这是在您UIWindow的上定义的windowScene。
let height = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
Den*_*Den 18
UIApplication.shared.windows在 iOS 15.0 中已弃用
iOS 15
let statusBarHeight = UIApplication.shared.connectedScenes
.filter {$0.activationState == .foregroundActive }
.map {$0 as? UIWindowScene }
.compactMap { $0 }
.first?.windows
.filter({ $0.isKeyWindow }).first?
.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
Run Code Online (Sandbox Code Playgroud)
Üma*_*mån 13
解决方案:
这似乎在 iPhoneX+ 设备中也没有任何警告地工作。
斯威夫特 4.2 / 5
if #available(iOS 13.0, *) {
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
statusBarHeight = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
} else {
statusBarHeight = UIApplication.shared.statusBarFrame.height
}
Run Code Online (Sandbox Code Playgroud)
尝试一下。希望能帮助到你。
小智 7
我遇到了与 MMV 相同的问题(请参阅他们对 Jordan H 回答的评论),view.window?.windowScene?.statusBarManager?.statusBarFrame.height在我的应用程序启动附近返回 nil。具体view.window返回nil。然后我尝试在 UIApplication.shared 上搜索 windows 属性:
for window in UIApplication.shared.windows
Run Code Online (Sandbox Code Playgroud)
在我的情况下,这返回了两个窗口。两个窗口具有相同的非零状态栏高度。我不确定为什么有两个窗口,但至少两个窗口都有相同的状态栏高度。我像这样访问状态栏高度:
if let height = window.windowScene?.statusBarManager?.statusBarFrame.height
Run Code Online (Sandbox Code Playgroud)
我决定在我的情况下,因为可能有不同的高度来为我的代码取最大的高度。这是我用于我的应用程序的代码:
let statusBarHeight: CGFloat = {
var heightToReturn: CGFloat = 0.0
for window in UIApplication.shared.windows {
if let height = window.windowScene?.statusBarManager?.statusBarFrame.height, height > heightToReturn {
heightToReturn = height
}
}
return heightToReturn
}()
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助某人!
小智 6
var statusBarHeight: CGFloat = 0
if #available(iOS 13.0, *) {
statusBarHeight = UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
} else {
statusBarHeight = UIApplication.shared.statusBarFrame.height
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5029 次 |
| 最近记录: |