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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:55:17