我有一个LazyVStack
,有很多行。代码:
struct ContentView: View {
var body: some View {
ScrollView {
LazyVStack {
ForEach(0 ..< 100) { i in
Text("Item: \(i + 1)")
.onAppear {
print("Appeared:", i + 1)
}
}
}
}
}
}
最初在屏幕上只能看到大约 40 行,但onAppear
触发了 77 行。这是为什么,为什么在屏幕上真正可见之前调用它?我不明白为什么 SwiftUI 必须“预加载”它们。
有没有办法解决这个问题,或者如果这是有意的,我怎样才能准确地知道最后一个可见项目(接受不同的行高)?
编辑
状态的文档LazyVStack
:
堆栈是“惰性的”,因为堆栈视图在需要将它们呈现在屏幕上之前不会创建项目。
所以这一定是一个错误,我想?