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

SwiftUI:Sheet嵌套场景下NavigationLink全屏跳转的视图层级配置

解决方案

要实现ThirdView通过NavigationLink打开全屏带返回按钮的FourthView,核心是调整NavigationView的层级位置,不要将其包裹在sheet外部,而是放在ThirdView内部:

  1. 保持SecondView打开ThirdView的sheet代码不变,无需在sheet中嵌套NavigationView:
.sheet(isPresented: $showSheet) {
    ThirdView()
}
  1. 在ThirdView内部添加NavigationView,并将NavigationLink置于其中:
struct ThirdView: View {
    var body: some View {
        NavigationView {
            VStack {
                // 点击后打开全屏的FourthView,自带返回按钮
                NavigationLink(destination: FourthView()) {
                    Text("Open FourthView")
                }
            }
            // 可选:隐藏ThirdView的导航栏,只让FourthView显示导航栏
            .navigationBarHidden(true)
        }
    }
}
  1. FourthView只需保持基础结构,导航栏会自动继承NavigationView的上下文,生成返回按钮:
struct FourthView: View {
    var body: some View {
        VStack {
            Text("Fourth View")
        }
        .navigationBarTitle("Fourth", displayMode: .inline)
    }
}

原理说明

把NavigationView放在ThirdView内部后,sheet仅负责展示ThirdView,而ThirdView的导航栈由内部的NavigationView管理。当触发NavigationLink时,FourthView会全屏覆盖当前的sheet层级,并且基于导航栈自动生成返回按钮,点击后回到ThirdView的sheet界面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:55:18