SwiftUI 列表和 OnAppear

mrb*_*ill 6 swiftui swiftui-list

我注意到列表视图的 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

...我希望打印命令在加载时运行几次,然后在向下滚动时继续打印。相反,它一次打印 20 次,然后在我开始向下滚动时再次打印。

有什么想法吗?

lor*_*sum 1

我认为它的表现符合预期。

对我来说,它在带有 .txt 文件的模拟器上打印了 15 次,iPhone 7在带有 .txt 文件的模拟器上打印了 20 次iPhone 11

我对print("BOOOOM \(index)")

列表在后台可能遵循性能和资源的平衡。

加载太少,如果滚动太快,用户会“卡住”,而加载太多会减慢滚动动画。