SwiftUI:动画列表中的更改而不动画内容更改

标签 swift swiftui watchos swiftui-list

我在 SwiftUI 中有一个简单的应用程序,显示 List , 每一项都是一个 VStack带两个 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 应用程序。

最佳答案

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

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

关于SwiftUI:动画列表中的更改而不动画内容更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59972470/

相关文章:

ios - 使用 Alamofire 使用参数数组上传多个文件

swift - 自定义 "list" View

swift - 下载 SwiftUI ListView 中 Firebase 存储的图像(联系应用)

swift - 如何在 SwiftUI 中渲染 HTML 字符串?

swift - 类型 '()' 不能符合 'View' ;只有 struct/enum/class 类型可以符合使用 swift ui 调用调用函数的协议(protocol)

ios - 将数据从 Apple Watch 发送到 iPhone

ios - 获取数据但无法正确显示

ios - 在快速构建 UISlider 时发送到实例的无法识别的选择器

swift - NSCollectionView 数据源无法正常工作

swiftui - 在 SwiftUI 的模式表上重命名 'Cancel'