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

SwiftUI 使用NavigationLink无法跳转至目标DetailView问题求助

核心问题点

  • 列表数据源model未遵循Identifiable协议,也未在ForEach中指定唯一id,导致列表项识别异常,无法触发NavigationLink的点击手势
  • NavigationLink的destination参数存在语法错误,同时错误使用Text包裹目标视图,若要跳转自定义DetailView直接传入对应实例即可
  • 若运行在iOS16+系统,旧的NavigationView已被废弃,存在兼容问题会导致跳转失效;如果是兼容低版本使用NavigationView未指定.stack样式,也可能因默认侧边栏样式导致跳转异常

修正后完整代码

import SwiftUI

// 示例Model,必须遵循Identifiable,或在ForEach中指定id
struct ListItemModel: Identifiable {
    let id = UUID()
    let codeName: String
}

// 你的数据源,替换为自己的实际数据
let model: [ListItemModel] = [
    ListItemModel(codeName: "001"),
    ListItemModel(codeName: "002"),
    ListItemModel(codeName: "003")
]

// 目标DetailView,替换为你自己的实现
struct DetailView: View {
    let codeName: String
    var body: some View {
        Text("这是\(codeName)的详情页")
            .navigationTitle("详情页")
        // 后续跳转SectionView直接在这里加NavigationLink即可
        // NavigationLink("跳转到Section页") {
        //     SectionView()
        // }
    }
}

struct ContentView: View {
    var body: some View {
        // iOS16+推荐使用NavigationStack
        NavigationStack {
            List {
                ForEach(model) { item in
                    NavigationLink {
                        // 直接传入目标View
                        DetailView(codeName: item.codeName)
                    } label: {
                        Text("Model \(item.codeName)")
                            .padding()
                    }
                }
            }
            .navigationTitle("列表页")
        }
    }
}

兼容低版本iOS的调整方案

如果需要兼容iOS15及更早版本,将NavigationStack替换为NavigationView并指定样式即可:

NavigationView {
    // 原有列表逻辑不变
}
.navigationViewStyle(.stack)

内容的提问来源于stack exchange,提问作者Wen Love Howard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:04