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

如何在SwiftUI中实现全屏模态视图展示(仿UIKit效果)

在SwiftUI中实现全屏模态视图并禁用下拉关闭

方法一:使用fullScreenCover(推荐,SwiftUI 3.0+)

这是SwiftUI原生提供的全屏模态方案,默认以全屏展示,且无法通过下拉手势关闭,完全匹配需求。代码示例:

struct ContentView: View {
    @State private var showFullScreenModal = false
    
    var body: some View {
        Button("展示全屏模态") {
            showFullScreenModal.toggle()
        }
        .fullScreenCover(isPresented: $showFullScreenModal) {
            FullScreenModalView()
                .toolbar(.hidden) // 按需隐藏导航栏
        }
    }
}

struct FullScreenModalView: View {
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        VStack {
            Text("这是全屏模态视图")
            Button("关闭") {
                dismiss()
            }
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .background(Color.white)
    }
}

关闭模态只能通过代码调用dismiss(),或者切换绑定的showFullScreenModal状态,不会响应下拉手势。

方法二:基于sheet修改样式(兼容旧版本)

如果需要沿用sheet组件,可通过以下设置改成全屏并禁用下拉关闭:

struct ContentView: View {
    @State private var showingSheet = false
    
    var body: some View {
        Button("展示全屏Sheet") {
            showingSheet.toggle()
        }
        .sheet(isPresented: $showingSheet) {
            SecondView(name: "Imran")
                .interactiveDismissDisabled() // 禁用下拉关闭手势
                .presentationDetents([.large]) // 设置为全屏高度
                .presentationDragIndicator(.hidden) // 隐藏顶部拖拽指示器
        }
    }
}

如果需要更贴近UIKit的modalPresentationStyle = .fullScreen设置,还可以通过自定义修改器实现:

struct FullScreenSheetModifier: ViewModifier {
    func body(content: Content) -> some View {
        content
            .background(
                UIViewControllerRepresentable { vc in
                    vc.modalPresentationStyle = .fullScreen
                }
            )
    }
}

// 使用方式
.sheet(isPresented: $showingSheet) {
    SecondView(name: "Imran")
        .modifier(FullScreenSheetModifier())
        .interactiveDismissDisabled()
}

总结

优先推荐fullScreenCover,它是SwiftUI为全屏模态场景专门设计的API,代码更简洁,行为更符合预期。如果需要兼容低版本SwiftUI,再考虑基于sheet的修改方案。

内容的提问来源于stack exchange,提问作者SHAH MD IMRAN HOSSAIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:45:28