我正在尝试实现异步图像加载,我注意到onAppear
正在为前20行(在iPhone XR和iPhone SE上为13行)触发,即使只有3-4行可见。
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
List {
ForEach(1..<100) { (i) in
RowView(rowId: i)
.frame(height: 300)
}
}
}
}
}
struct RowView : View {
@State var image: Image = Image(systemName: "photo")
var rowId: Int
var body: some View {
VStack(alignment: .center) {
HStack {
Text("Row \(rowId)")
Spacer()
}
self.image
.resizable()
.onAppear(perform: {
print("Row \(self.rowId) appeared")
})
}
}
}
如果仅用RowView
替换Text
并删除frame
,则前20行确实可见,因此我可以理解为什么会发生这种情况(即与撤消frame
时与触发onAppear
时的顺序)
有什么方法可以使onAppear
仅在该行实际可见时触发?