iOS15中ForEach结合NavigationLink跳转不同视图问题求助
必须包裹在导航容器内
iOS 16+ 需使用NavigationStack,iOS 15及以下用NavigationView,缺少导航容器会直接导致NavigationLink失效,甚至页面空白。示例代码:struct ContentView: View { let items = ["餐厅A", "餐厅B", "餐厅C"] var body: some View { NavigationStack { List { ForEach(items, id: \.self) { item in NavigationLink(destination: RestaurantsView(restaurantName: item)) { Text(item) } } } .navigationTitle("餐厅列表") } } }检查ForEach数据源合法性
数据源要么遵循Identifiable协议,要么给ForEach显式指定id参数,否则循环无法正常渲染内容,页面会显示空白。比如自定义模型场景:struct Restaurant: Identifiable { let id = UUID() let name: String } let restaurants: [Restaurant] = [ Restaurant(name: "餐厅A"), Restaurant(name: "餐厅B") ] // 使用时的ForEach写法 ForEach(restaurants) { restaurant in NavigationLink(destination: RestaurantsView(restaurant: restaurant)) { Text(restaurant.name) } }确认目标视图初始化逻辑
替换为RestaurantsView后出错,大概率是该视图需要参数但未传入,或是内部逻辑缺失导致空白。比如RestaurantsView的定义:struct RestaurantsView: View { let restaurantName: String var body: some View { Text("当前餐厅:\(restaurantName)") .navigationTitle(restaurantName) } }务必在NavigationLink的
destination中正确传入视图所需参数,避免因数据缺失导致空白。避免NavigationLink错误写法
不要将NavigationLink与可点击内容分离,比如以下错误写法会导致点击无响应:// 错误示例 ForEach(items, id: \.self) { item in Text(item) NavigationLink(destination: RestaurantsView(restaurantName: item)) { EmptyView() } }正确写法是把可交互内容放在NavigationLink的label闭包内。
内容的提问来源于stack exchange,提问作者Deniss
相关产品推荐
相关产品推荐

