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
相关产品推荐
相关产品推荐

