为什么在 SwiftUI 中会抛出错误“‘windows’在 iOS 15.0 中已弃用:在相关窗口场景上使用 UIWindowScene.windows”?

2 swift swiftui

我在 SwiftUI 2.0 中有一个项目,但是当我更新到 SwiftUI 3.0 时,它会抛出一个错误

视窗

作为一个

windows' 在 iOS 15.0 中已弃用:在相关窗口场景上使用 UIWindowScene.windows

任何想法?

.padding(.top, UIApplication.shared.windows.first?.safeAreaInsets.top)
Run Code Online (Sandbox Code Playgroud)

ale*_*rov 13

嗯,警告消息相当充分地反映了问题的本质。

Apple 确实已弃用UIApplication.shared.windows,因此要修复您的警告,UIApplication.shared.windows.first?您应该使用:

UIApplication
.shared
.connectedScenes
.flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
.first { $0.isKeyWindow }
Run Code Online (Sandbox Code Playgroud)

然后,你的.padding视图修饰符将如下所示:

.padding(.top, UIApplication
                    .shared
                    .connectedScenes
                    .flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
                    .first { $0.isKeyWindow }?.safeAreaInsets.top)
Run Code Online (Sandbox Code Playgroud)

  • 我在堆栈溢出中看到了这个答案,对于任何支持多个场景的应用程序来说,这只是一个糟糕的解决方案。这包括任何支持多任务处理的 iPad 添加。此代码获取随机场景,而不是特定于相关视图的场景。 (2认同)