我注意到列表视图的OnAppear事件有一些奇怪的行为。我认为只要在屏幕上出现视图,就可以运行OnAppear闭包,但是在加载列表时,它似乎可以一次全部运行。
例如以下代码:
@State var rows: [String] = Array(repeating: "Item", count: 20)
var body: some View {
List(0..<rows.count, id: \.self) { index in
Text(verbatim: self.rows[index])
.onAppear {
print("BOOOOM")
}
.frame(height:400)
}
}
...我希望print命令在加载时运行几次,然后在我向下滚动时继续打印。而是一次打印20次,然后在我开始向下滚动时再次打印。
有什么想法吗?
答案 0 :(得分:0)
我认为它的行为符合预期。
对我来说,它在iPhone 7
的Simulator上打印了15次,在iPhone 11
的Simulator上打印了20次。
我对print("BOOOOM \(index)")
列表在后台遵循的性能和资源之间可能存在平衡。
加载得太少,如果滚动得太快而不是加载得太多并放慢了滚动动画,用户将“卡住”。