ios 向列表行中的VStack添加元素时,SwiftUI列表动画不流畅

kjthegm6  于 2023-06-07  发布在  iOS
关注(0)|答案(1)|浏览(243)

我在我的应用程序中使用List,其中一些行包含VStacks。我在ScrollView中使用的是列表而不是LazyVStack,因为我想利用一些列表特性,比如移动行、滑动等。
当我尝试添加元素到一个VStack中的一个列表行的动画,我得到了一些不稳定的行为,并想知道无论如何避免这种情况。我复制此行为的示例如下:

struct ListAnimation: View {
    
    @State var showSecondText = false
    
    var body: some View {
        //ScrollView {
            List {
                VStack(alignment: .center) {
                    Text("First Text Title")
                    if showSecondText {
                        Text("Second Text Title")
                    }
                }
                .frame(maxWidth: .infinity)
                Button {
                    withAnimation {
                        showSecondText.toggle()
                    }
                } label: {
                    Text("Show Second Text")
                }
            }
        //}
    }
}

取消注解ScrollView并将List更改为LazyVStack将使动画非常平滑。但在列表的情况下,动画是不稳定的,第一个文本标题在动画过程中上下跳动,而不是停留在原地。对于更大、更复杂的数据,跳动的动画更加明显。
在列表行中向VStack添加元素时,是否有方法避免这种情况?

x33g5p2x

x33g5p2x1#

您没有添加到列表中,而是添加到VStack中,因此出现了无法解释的行为。该列表将VStack视为单行。
您可以直接向List添加多个项目。

List {
    Text("First Text Title")
    if showSecondText {
        Text("Second Text Title")
    }
    Button {
        withAnimation {
            showSecondText.toggle()
        }
    } label: {
        Text("Show Second Text")
    }

}

List有一个隐式的ScrollViewForm也是),所以不需要添加一个。

相关问题