Ios 迅捷|和#xA0;在屏幕外滚动时停止LazyVStack itemviews子视图自动解除分配
我有以下情况: 在我的LazyVGrid中,我有一些项目(Ios 迅捷|和#xA0;在屏幕外滚动时停止LazyVStack itemviews子视图自动解除分配,ios,swift,swiftui,Ios,Swift,Swiftui,我有以下情况: 在我的LazyVGrid中,我有一些项目(Rectangle),每个矩形都有一个子视图(overlyrectangle) 现在,当我将这些项目滚动到屏幕外时,它们会被释放。正如您在这里看到的,onAppear动画再次出现 我不想那样。 除了用普通的LazyVStack替换外,我还能做些什么 以下是演示代码: struct ContentView: View { var body: some View { ScrollView {
Rectangle
),每个矩形都有一个子视图(overlyrectangle
)
现在,当我将这些项目滚动到屏幕外时,它们会被释放。正如您在这里看到的,onAppear
动画再次出现
我不想那样。
除了用普通的LazyVStack
替换外,我还能做些什么
以下是演示代码:
struct ContentView: View {
var body: some View {
ScrollView {
LazyVStack {
ForEach(0..<100) { i in
Rectangle()
.frame(width: 200, height: 100)
.foregroundColor(.green)
.overlay(OverlayRectangle(index: i))
}
.frame(maxWidth: .infinity)
}
}
}
private struct OverlayRectangle: View {
@State private var appear = false
var index: Int
var body: some View {
Rectangle()
.frame(width: 50, height: 30)
.foregroundColor(.red)
.overlay(Text("\(index)").foregroundColor(.white))
.opacity(appear ? 1.0 : 0.0)
.onAppear { DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { appear = true } }
}
}
}
struct ContentView:View{
var body:一些观点{
滚动视图{
懒散的{
弗雷奇(0..不太确定您在这里尝试做什么…它的行为与您编码的完全相同。我认为您误解了LazyVStack的本质-它重用视图,因此一旦从顶部消失一行,该视图将用于渲染下一行,反之亦然。您是对的,谢谢!我想我只是想知道,因为这只发生在的子视图中每个项目视图。