我在我的应用程序中使用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添加元素时,是否有方法避免这种情况?
1条答案
按热度按时间x33g5p2x1#
您没有添加到列表中,而是添加到
VStack
中,因此出现了无法解释的行为。该列表将VStack
视为单行。您可以直接向
List
添加多个项目。List
有一个隐式的ScrollView
(Form
也是),所以不需要添加一个。