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

SwiftUI中NavigationStack与.navigationDestination导航失效问题求助

问题解决:NavigationStack导航未触发的修复

你的导航没触发的核心原因是**.navigationTitle和.navigationDestination修饰符的位置错误**——这两个修饰符必须作用在NavigationStack内部的视图上,而不是放在NavigationStack的外部。

修正后的完整代码

//
//  StateView.swift
//  SWiftUITutorial
//
//  Created by Ismael Márquez on 10/4/24.
//

import SwiftUI

class UserData: ObservableObject {
    
    @Published var name = "Ismael Márquez"
    @Published var age = 22
}

struct StateView: View {
    
    @State private var value = 0
    @State private var selection: Int?
    @State private var readyToNavigate = false
    @StateObject private var user = UserData()
    
    var body: some View {
        NavigationStack {
            VStack {
                Text("El valor actual es \(value)")
                Button("Suma 1") {
                    value += 1
                }
                Text("Mi nombre es \(user.name) y mi edad es \(user.age)")
                Button("Actualizar datos") {
                    user.name = "Pedro"
                    user.age = 33
                }
                Button {
                    //Code here before changing the bool value
                    readyToNavigate = true
                } label: {
                    Text("Ir a BindingView")
                }
            }
            // 将导航相关修饰符移到NavigationStack内部的VStack上
            .navigationTitle("StateView")
            .navigationDestination(isPresented: $readyToNavigate) {
                BindingView(value: $value, user: user)
            }
        }
    }
}

#Preview {
    StateView()
    // 移除多余的environmentObject,因为StateView已经通过@StateObject初始化了UserData
}

额外说明

  • 导航修饰符作用域:NavigationStack的导航相关修饰符(如navigationDestination、navigationTitle)必须属于其内部的视图层级,否则SwiftUI无法将导航目标关联到对应的导航栈。
  • Preview优化:你的StateView已经用@StateObject创建了UserData实例,无需再通过.environmentObject重复注入,否则会导致两个不同的UserData实例存在,可能引发数据不一致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:20:12