SwiftUI中NavigationStack点击项后重复推入视图问题求助
问题原因与解决方案
问题根源
你的代码中将.navigationTitle和.navigationDestination修饰符附加在了ForEach上,这会导致循环里的每个列表项都重复注册了相同类型的导航目的地。点击列表项时,系统会匹配所有已注册的目的地,进而把数组中所有项一次性推入导航栈,最终出现多次点击返回才能回到根视图的问题。
修正步骤
- 调整导航修饰符位置:把
.navigationTitle和.navigationDestination移到List外部,确保仅注册一次导航规则。 - 补充缺失的
searchText状态变量(若需保留搜索功能)。 - 变量名遵循Swift小驼峰规范(可选但推荐)。
修正后的主视图代码
struct ContentView: View { @State private var biasStruct: BiasData = BiasData.allBias @State private var searchText = "" // 补充搜索文本状态 var body: some View { VStack { NavigationStack { List { ForEach(biasStruct.biases, id: \.self) { entry in NavigationLink(value: entry) { Text(entry.name) } } } .navigationTitle("Biases") .navigationDestination(for: Biase.self) { bias in Text(bias.name) .searchable(text: $searchText) } // 若要在根视图添加搜索框,将.searchable移到此处 } .padding(8) } } }
说明
修改后,导航目的地仅注册一次,点击列表项时只会将对应的单个Biase实例推入导航栈,返回时一次点击即可回到根视图。
内容的提问来源于stack exchange,提问作者John Citrowske
相关产品推荐
相关产品推荐

