在现场设置 UIWindowScene.PresentationStyle?

Set UIWindowScene.PresentationStyle on Scene?

我有一个示例视图,我想将其呈现为模态 window,类似于 iPadOS 15 中的邮件消息撰写 window:

WindowGroup("general.status", id: "create") { authorView  }
    .handlesExternalEvents(matching: ["starlight://create"])
    .commands { TextEditingCommands() }

通过 handlesExternalEvents(matching:Set<String>) 进行此设置后,我可以使用带有自定义标识符的 openURL 打开 window,并且可以在多任务菜单中看到模式选项。然而,当打开这个window时,它仍然显示为全屏场景。我注意到在“将您的 iPad 应用提升到一个新的水平 (WWDC21)”中,您可以通过将呈现样式设置为 UIWindowScene.PresentationStyle.prominent 来为 UIKit 中的 window 设置呈现样式。但是,我在 SwiftUI 中找不到与此等效的内容。有没有一种方法可以在 SwiftUI 中执行此操作,或者调用一些 UIKit 代码来设置具有该激活条件的 WindowGroup(或 authorView)?

我最初是在 https://developer.apple.com/forums/thread/700820 以及 r/SwiftUI 和 r/iOSProgramming 的开发者论坛上提出这个问题的,但我想涵盖我的基础并在这里提出问题,如果有人知道。

我已通过 TSI 就此特定问题联系了 Apple。从 SwiftUI 的当前版本开始,这是不可能的。他们建议我改用 .sheet 修饰符并放弃拆分 window 功能。否则,我可以创建一个 UISceneDelegate 并直接使用 UIKit API:

let options = UIWindowScene.ActivationRequestOptions()
options.preferredPresentationStyle = .prominent
let userActivity = NSUserActivity(activityType: SecondSceneDelegate.sceneUserActivityType)
userActivity.targetContentIdentifier = SecondSceneDelegate.sceneUserActivityType

UIApplication.shared.requestSceneSessionActivation(nil,
    userActivity: userActivity,
    options: options,
    errorHandler: nil)