我正在使用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重绘整个列表,而仅绘制新添加的行?
答案 0 :(得分:1)
未绘制初始化。通过修改数据源,您启动了列表刷新,从而重建了行值,但仅针对与先前不同的行才重新绘制(称为正文)。此外,List会缓存行,并且不会保留超出屏幕的大小,以及加成对的大小。因此,它只能重绘全部行,因为会忽略不可见项。
因此,只需在View.init中不要做任何繁重的工作,我以为您这样做并抱怨刷新时会重新做。