如何在 SwiftUI 中为 LazyVStack 设置自定义预取时间?

amb*_*dor 5 lazy-loading ios swift swiftui lazyvstack

TL;DR:是否有一些参数或方法可以设置 LazyVStack 初始化视图的偏移量?

LazyVStack 延迟初始化视图,因此当我滚动时,下一个(几个?)视图将被初始化。我在绘制视图后加载图像,使用 swift 中的 SDWebImage 包。这需要几毫秒的时间来查看视图,并且由于我使用的是 LazyVStack,如果滚动速度很快(即使在合理的限制内),占位符会在短时间内可见,因为视图刚刚(太)短的一刻之前创建。如果我滚动速度非常慢,图像将在视图出现之前加载,因此看不到占位符。

如果我能让 LazyVStack 提前几毫秒初始化视图,我的问题就会消失......

曾经认为这是一个非常常见的问题,正确安排初始化时间以免加载太早或太晚..但文档中对此没有任何内容

amb*_*dor 1

快速回答问题:没有


话虽这么说,在这种情况下仍然有一个解决方案:由于我之前使用过,只需在视图开始初始化之前SDWebImageSwiftUI调用以下命令即可解决我的问题:

SDWebImagePrefetcher.shared.prefetchURLs(urls) { finishedCount, skippedCount in
     print("preloading complete")
}
Run Code Online (Sandbox Code Playgroud)

然后在我的 LazyVStack 中使用:

LazyVStack {
     ForEach(items, id: \.self) { item in
             ItemView(item: item)
                   .onAppear {
                        // calling function to prefetch next x-items by their url
                  }
            }
     }
}
Run Code Online (Sandbox Code Playgroud)