gpt4 book ai didi

swift - Xcode warning : 'windows' was deprecated in iOS 15. 0 : Use UIWindowScene. windows on a relevant window scene instead

转载 作者:行者123 更新时间:2023-12-05 02:33:51 31 4
gpt4 key购买 nike

将我的应用程序的部署目标更新到 15.0 时,我收到此警告:

'windows' was deprecated in iOS 15.0: Use UIWindowScene.windows on arelevant window scene instead

我曾尝试在网上查看可以采取哪些措施来解决此问题,但找不到太多相关信息。希望您能分享一些建议。

我在出现此警报的地方使用的代码行是:

let window = UIApplication.shared.windows[0]

接着在我的 ViewDidLoad() 中:

 DispatchQueue.main.async { [weak self] in
if defaults.bool(forKey: "darkModeBoolSwitch") == true {
self?.window.overrideUserInterfaceStyle = .dark

} else if defaults.bool(forKey: "darkModeBoolSwitch") == false {
self?.window.overrideUserInterfaceStyle = .light

}

最佳答案

@DuncanC 的替代解决方案也可能对您有用:UIApplication 有一个 connectedScenes属性,它列出了在您的应用程序中工作的所有当前事件场景(对于大多数应用程序,这只是一个主要场景)。

在这些场景中,您可以过滤 UIWindowScene 的场景(忽略当前未激活且在前景中的场景),并在其中找到第一个具有窗口的场景是关键:

extension UIApplication {
static var firstKeyWindowForConnectedScenes: UIWindow? {
UIApplication.shared
// Of all connected scenes...
.connectedScenes.lazy

// ... grab all foreground active window scenes ...
.compactMap { $0.activationState == .foregroundActive ? ($0 as? UIWindowScene) : nil }

// ... finding the first one which has a key window ...
.first(where: { $0.keyWindow != nil })?

// ... and return that window.
.keyWindow
}
}

我犹豫是否将此扩展称为 UIApplication.keyWindow 之类的名称,因为弃用这些 API 的原因是因为对多场景应用程序的泛化,每个应用程序可能都有自己的关键窗口...但这应该有效。

如果你还需要支持没有UIWindowScene.keyWindow的iOS 14 ,您可以将 firstWhere(...)?.keyWindow 替换为:flatMap(\.windows).first(where:\.isKeyWindow)

关于swift - Xcode warning : 'windows' was deprecated in iOS 15. 0 : Use UIWindowScene. windows on a relevant window scene instead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70870234/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com