iOS 16 中 List 中的嵌套 ScrollView + 可刷新的奇怪行为

mat*_*rda 8 iphone ios swift swiftui ios16

在我的 SwiftUI 应用程序中,我有一个带有嵌套 ScrollView 的列表,因为我已将 iPhone 更新到 iOS 16,所以主列表上的刷新有一个奇怪的行为。似乎每个ScrollView都有自己的刷新。问题是我在主列表上应用了 .refreshable 修饰符,而不是在嵌套列表上。

在 iOS 16 之前,这个问题并不存在。那么,这是一个错误还是我们可以通过某种方式修复它?

这是代码和短视频:

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)
        }
    }
    .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)
        }
    }
    .listRowSeparator(.hidden)
}
.listStyle(.plain)
.refreshable {
    print("refresh!")
}
Run Code Online (Sandbox Code Playgroud)

问题视频

Rol*_*tte 4

如果您更改Lista 的行ScrollView,然后更改.listStyle(.plain)for 的行.padding(.horizontal),它将以相同的方式工作,没有错误。