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

SwiftUI问题:如何从Sheet导航至全屏视图?

解决Sheet内NavigationLink跳转全屏视图的问题

问题原因

你当前的代码把NavigationStack放在Sheet内部,NavigationLink的跳转只会在这个Sheet专属的导航栈里进行,所以目标视图会被限制在Sheet的尺寸范围内,无法全屏展示。

方案1:用fullScreenCover直接弹出全屏视图

这是最直接的解决方式,把Sheet里的NavigationLink换成按钮,点击后触发全屏覆盖视图:

struct ContentView2: View {
    @State private var sheetDisplayed = false
    
    var body: some View {
        VStack {
            Button("Show Sheet") {
                sheetDisplayed.toggle()
            }.sheet(isPresented: $sheetDisplayed) {
                SheetNavigationView()
            }
        }
    }
}

struct SheetNavigationView: View {
    @State private var showFullScreenView = false
    
    var body: some View {
        Button("Go to full screen view") {
            showFullScreenView.toggle()
        }
        .fullScreenCover(isPresented: $showFullScreenView) {
            SheetView()
        }
    }
}

struct SheetView : View {
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        Text("View One")
            .navigationTitle("Full Screen View")
            .toolbar {
                Button("Dismiss") {
                    dismiss()
                }
            }
    }
}

方案2:将全屏视图的控制权移到主视图

如果想保留NavigationLink的交互逻辑,可以在主视图中维护状态变量,通过Sheet里的导航动作触发全屏展示:

struct ContentView2: View {
    @State private var sheetDisplayed = false
    @State private var showFullScreenView = false
    
    var body: some View {
        VStack {
            Button("Show Sheet") {
                sheetDisplayed.toggle()
            }.sheet(isPresented: $sheetDisplayed) {
                NavigationStack {
                    NavigationLink("Go to view") {
                        // 跳转后触发主视图的全屏覆盖,同时关闭Sheet(可选)
                        Color.clear
                            .onAppear {
                                showFullScreenView = true
                                sheetDisplayed = false
                            }
                    }
                }
            }
            .fullScreenCover(isPresented: $showFullScreenView) {
                SheetView()
            }
        }
    }
}

struct SheetView : View {
    @Environment(\.dismiss) private var dismiss
    
    var body: some View {
        Text("View One")
            .navigationTitle("Full Screen View")
            .toolbar {
                Button("Dismiss") {
                    dismiss()
                }
            }
    }
}

两种方案都能实现从Sheet跳转到全屏视图的效果,你可以根据自己的交互需求选择。

内容的提问来源于stack exchange,提问作者Pratyay Bishnupuri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:17:20