Swiftui 列表动画

Swiftui List animation

我正在尝试为点列表的内容制作动画。该列表从最高到最低排序,因此它会重新组织为较低的值高于上面的行。通过在列表上使用 .animation(.default) 动画效果很好,但是,当我打开视图时它也会为整个列表设置动画。整个列表就位了。我希望列表是静态的,只有行在需要重新排序时移动

            List {
            ForEach(players) { player in
                Text(player.score)
                }
            }.animation(.default)

要仅在 State 数据发生变化时设置动画,请使用 withAnimation 围绕您更改的部分而不是整个列表:


import SwiftUI

struct Player: Identifiable {
    var id = UUID()
    var score: String
}

struct ContentView: View {
    @State var players: [Player] = [
        .init(score: "2"),
        .init(score: "3"),
        .init(score: "6"),
        .init(score: "1")]
    var body: some View {
        VStack {
            Button("shuffle") {
                withAnimation(.easeIn) {
                    players.shuffle()
                }
            }
            List {
                ForEach(players) { player in
                Text(player.score)
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}