如何防止重绘整个无限滚动列表?

时间:2020-05-23 02:12:46

标签: ios swift swiftui

我正在使用SwiftUI通过以下方式创建无限滚动List

// My data structure
struct MyData {
    title: String
}

// My datasource variable
@State var datasource: [MyData]

// My List view
List(datasource.enumerated().map({ $0 }), id: \.title) { (index, myData) in
    MyListRow(myData)
        .onAppear(perform: {
            if index == datasource.count - 2 {
                fetchMoreData()
            }
        })
}

通过此代码,当我滚动到底部时,列表会自动增加。

但是,实际上,整个列表已重绘!这意味着先前已构造的列表行已取消初始化并再次初始化。

我的问题是:如何防止SwiftUI重绘整个列表,而仅绘制新添加的行?

1 个答案:

答案 0 :(得分:1)

未绘制初始化。通过修改数据源,您启动了列表刷新,从而重建了行值,但仅针对与先前不同的行才重新绘制(称为正文)。此外,List会缓存行,并且不会保留超出屏幕的大小,以及加成对的大小。因此,它只能重绘全部行,因为会忽略不可见项。

因此,只需在View.init中不要做任何繁重的工作,我以为您这样做并抱怨刷新时会重新做。