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

SwiftUI中Toolbar内NavigationLink跳转后dismiss返回根视图如何解决

问题原因

这个异常是因为放在toolbar中的NavigationLink不属于当前Test2视图的导航栈层级,而是直接关联到了最外层的NavigationView,所以从Test3调用dismiss时会直接弹出整个Test2视图,回到根视图Test1。

解决方案

你可以在Test2的视图层级内定义一个隐藏的NavigationLink,用状态变量控制它的激活状态,再在toolbar里加按钮触发这个状态变量即可,修改后的Test2代码如下:

struct Test2: View {
    @Environment(\.presentationMode) var presentationMode
    // 控制Test3跳转的状态变量
    @State private var showTest3 = false
    
    var body: some View {
        VStack {
            // 隐藏的NavigationLink,放在当前视图的导航栈层级内
            NavigationLink(isActive: $showTest3, destination: Test3.init, label: { EmptyView() })
            
            Button("Return") {
                self.presentationMode.wrappedValue.dismiss()
            }
            .padding()
        }
        .navigationBarTitle("Test 2")
        .toolbar {
            // Toolbar内只放触发状态的按钮
            Button("Test 3") {
                showTest3 = true
            }
         }
    }
}

该方案保证了NavigationLink挂载在Test2的导航栈上,Test3 dismiss时只会弹出自身,回到Test2,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:15:01