从 SwiftUI 的 ScrollView 列表中获取 onAppear 行为

M. *_*oot 12 swiftui

以您期望的方式为该列表中的元素创建List视图时onAppear:只要滚动到该元素,onAppear就会触发。但是,我正在尝试实现这样的水平列表

ScrollView(.horizontal) { 
   HStack(spacing: mySpacing) {
      ForEach(items) { item in 
         MyView(item: item)
            .onAppear { \\do something }
      } 
   }
}
Run Code Online (Sandbox Code Playgroud)

使用此方法onAppear一次触发所有项目,也就是说:立即,但我想要与List视图相同的行为。我该怎么做呢?是否有手动触发 onAppear 或控制视图加载的方法?

为什么我要实现这一点:我制作了一个自定义Image视图,仅当它出现时才从 URL 加载图像(并同时替换占位符),这对于List视图来说效果很好,但我也希望它为我的水平“列表”工作。

M. *_*oot 5

根据 SwiftUI 2.0 (XCode 12 beta 1),这个问题最终得到了原生解决:在 a LazyHStack(或任何其他带有 Lazy 前缀的网格或堆栈)元素中,只有onAppear当它们出现在屏幕上时才会初始化(并因此触发)。