首页 > 解决方案 > SwiftUI:在不动画内容更改的情况下动画列表中的更改

问题描述

我在 SwiftUI 中有一个简单的应用程序,它显示 a List,每个项目都是 aVStack有两个Text元素:

var body: some View {
    List(elements) { item in
        NavigationLink(destination: DetailView(item: item)) {
            VStack(alignment: .leading) {
                Text(item.name) 
                Text(self.distanceString(for: item.distance))
            }
        }
    }
    .animation(.default)
}

.animate()那里,因为我想在elements数组更改时对列表的更改进行动画处理。不幸的是,SwiftUI 还会对内容的任何更改进行动画处理,从而导致奇怪的行为。例如,Text每个项目中的第二个更新非常频繁,现在更新将...在更新到新内容之前很快显示标签被截断(末尾带有)。

那么,当我更新列表的内容时,如何防止这种奇怪的行为,但在列表中的元素发生变化时保留动画呢?

如果它是相关的,我正在创建一个 watchOS 应用程序。

标签: swiftswiftuiwatchosswiftui-list

解决方案


以下应该禁用行内部的动画

VStack(alignment: .leading) {
    Text(item.name) 
    Text(self.distanceString(for: item.distance))
}
.animation(nil)

推荐阅读