iOS16中List嵌套ScrollView的refreshable异常行为问题咨询
iOS16下List嵌套ScrollView触发重复.refreshable的问题修复
这是iOS16引入的行为异常——嵌套的ScrollView会继承父List的.refreshable修饰符,导致下拉水平ScrollView时也触发主List的刷新动作,iOS16之前版本无此问题。
修复方案很简单:给每个嵌套的水平ScrollView添加一个空的.refreshable {}修饰符,阻断父视图的刷新动作传递:
修改后的代码示例:
List { VStack(alignment: .leading) { Text("Line 1") .font(.title) ScrollView(.horizontal, showsIndicators: false) { LazyHStack(spacing: 20) { Text("Item 1") Text("Item 2") Text("Item 3") Text("Item 4") Text("Item 5") Text("Item 6") Text("Item 7") Text("Item 8") Text("Item 9") Text("Item 10") } .frame(height: 180) } .refreshable {} // 添加空实现阻断刷新传递 } .listRowSeparator(.hidden) VStack(alignment: .leading) { Text("Line 2") .font(.title) ScrollView(.horizontal, showsIndicators: false) { LazyHStack(spacing: 20) { Text("Item 1") Text("Item 2") Text("Item 3") Text("Item 4") Text("Item 5") Text("Item 6") Text("Item 7") Text("Item 8") Text("Item 9") Text("Item 10") } .frame(height: 180) } .refreshable {} // 添加空实现阻断刷新传递 } .listRowSeparator(.hidden) } .listStyle(.plain) .refreshable { print("refresh!") }
添加后,只有下拉主List时才会触发print("refresh!"),嵌套的水平ScrollView下拉不会再触发刷新动作。
内容的提问来源于stack exchange,提问作者mattialerda
相关产品推荐
相关产品推荐

