Ios 迅捷|和#xA0;在屏幕外滚动时停止LazyVStack itemviews子视图自动解除分配

Ios 迅捷|和#xA0;在屏幕外滚动时停止LazyVStack itemviews子视图自动解除分配,ios,swift,swiftui,Ios,Swift,Swiftui,我有以下情况: 在我的LazyVGrid中,我有一些项目(Rectangle),每个矩形都有一个子视图(overlyrectangle) 现在,当我将这些项目滚动到屏幕外时,它们会被释放。正如您在这里看到的,onAppear动画再次出现 我不想那样。 除了用普通的LazyVStack替换外,我还能做些什么 以下是演示代码: struct ContentView: View { var body: some View { ScrollView {

我有以下情况:

在我的LazyVGrid中,我有一些项目(
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的本质-它重用视图,因此一旦从顶部消失一行,该视图将用于渲染下一行,反之亦然。您是对的,谢谢!我想我只是想知道,因为这只发生在的子视图中每个项目视图。