gpt4 book ai didi

ios - 如何制作从 SwiftUI 列表中删除多行的动画?

转载 作者:行者123 更新时间:2023-12-02 02:50:28 32 4
gpt4 key购买 nike

请查看演示该问题的示例 View :

struct ListRemovalTransition: View {
let list1 = ["A", "B", "C", "D"]
let list2 = ["A", "E", "F", "G", "H", "I", "J", "K"]

@State var toggle = false
var chosenList: [String] {
toggle ? list1 : list2
}

var body: some View {
VStack {
Toggle(isOn: $toggle) {
Text("Switch List")
}

List(chosenList, id: \.self) { item in
Text(item)
.transition(AnyTransition.opacity.animation(.default))
}
}
.padding()
}
}

struct ListRemovalTransition_Previews: PreviewProvider {
static var previews: some View {
ListRemovalTransition()
}
}

transition demo

期望的结果是各个行在删除时淡出而不改变位置。相反,发生的事情似乎是所有行在被删除之前首先相互重叠。我已向行文本添加了带有动画的过渡,但这没有影响。

最佳答案

只需将 id(:) 修饰符添加到 List 即可删除默认动画。然后将 transition(:) 修饰符添加到 List 中以获得所需的过渡。它工作完美。我刚刚在 Xcode 11.5 上进行了测试。这是我的代码...

struct ListRemovalTransition: View {
let list1 = ["A", "B", "C", "D"]
let list2 = ["A", "E", "F", "G", "H", "I", "J", "K"]

@State var toggle = false
var chosenList: [String] {
toggle ? list1 : list2
}

var body: some View {
VStack {
Toggle(isOn: $toggle) {
Text("Switch List")
}

List(chosenList, id: \.self) { item in
Text(item)
}
.id(UUID())
.transition(AnyTransition.opacity.animation(.default))
}
.padding()
}
}

demo

谢谢。 X_X

关于ios - 如何制作从 SwiftUI 列表中删除多行的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62077054/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com