我正在将适用于 iPadOS 的 iOS13 应用程序转换为 SceneDelegate(多窗口)。
如何从当前SceneDelegate获取当前UIWindow?
我知道 a 可以使用访问当前场景UIView.window
or UIViewController.view.window
,但我有一个非 UI 类(AppDelegate),我需要在其中获取窗口(iOS12 之前的 keyWindow)以在所有内容之上显示小吃栏。
我曾经做[UIApplication sharedApplication].keyWindow
但现在,当然这是错误的。
斯威夫特 5.x / iOS 13.x
受到许多解决方案的启发,为了找回我的旧窗口属性(在连接的场景中搜索它),我实现了一些扩展:
extension UIApplication {
var currentWindow: UIWindow? {
connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
}
}
Usage:
if let window = UIApplication.shared.currentWindow {
// do whatever you want with window
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)