Mac Catalyst下使用.sheet修饰符时,如何启用红叉按钮正常退出应用?
解决Mac Catalyst/SwiftUI中Sheet弹出时主窗口关闭按钮禁用的问题
在Mac Catalyst环境下使用SwiftUI的.sheet修饰符时,主窗口的红色关闭按钮会被自动禁用,导致只能通过强制退出关闭应用。以下是可行的解决方法:
方法:修改主窗口的isModalInPresentation属性
当Sheet弹出时,系统会将主窗口的根视图控制器的isModalInPresentation设为true,这会锁定主窗口的操作(包括关闭按钮)。我们可以在Sheet出现后,手动将该属性重置为false,恢复关闭按钮的可用性。
代码示例
struct ContentView: View { @State private var showSheet = false var body: some View { Button("弹出Sheet") { showSheet = true } .sheet(isPresented: $showSheet) { SheetContentView() .onAppear { // 获取当前主窗口 guard let keyWindow = UIApplication.shared.connectedScenes .compactMap({ $0 as? UIWindowScene }) .first?.windows .first(where: { $0.isKeyWindow }) else { return } // 重置主窗口根视图控制器的模态属性 keyWindow.rootViewController?.isModalInPresentation = false } } } } struct SheetContentView: View { var body: some View { Text("示例Sheet内容") .padding() } }
原理说明
isModalInPresentation属性控制视图控制器在模态呈现时是否锁定父级界面。将其设为false后,主窗口的操作权限会被恢复,红色关闭按钮即可正常使用。
该方法不会影响Sheet本身的交互逻辑,Sheet仍可正常关闭,同时主窗口的关闭功能也能正常工作。
内容的提问来源于stack exchange,提问作者Thibault Farnier
相关产品推荐
相关产品推荐

