You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:41:09