视图模型数据更改时如何禁用动画?
我有以下代码:
struct FormView: View {
@ObservedObject var viewModel: FormViewModel
var body: some View {
List {
ForEach(viewModel.options) { option in
Text(option.displayValue)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
每次视图模型更改时List都会使用动画进行更新。
我怎样才能禁用它?
我尝试添加.animation(nil)但它没有帮助
我找到的解决方案是添加一个每次都会改变的唯一标识符,这样它每次都会在没有动画的情况下重建列表。在 iOS 13.4 上验证。
var body: some View {
List {
ForEach(viewModel.options) { option in
Text(option.displayValue)
}
}
.id(UUID()) // no animation
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为最好的解决方案是将 UUID() 设置为动画值输入:
.animation(nil, value: UUID())
Run Code Online (Sandbox Code Playgroud)
Apple 给我们一个更改以在 List 上执行此操作之前的解决方法是调用 List.id(_:) 它会更改 List 的内部状态并强制 List 立即重新创建,而不需要任何动画。有关详细信息,请参阅列表重新加载动画故障
可以在任何 View 上执行相同的操作(func id() 是 View 协议的一部分),但您必须知道所有状态变量都将具有初始“默认”状态,因此请谨慎使用。这与“重新创建”视图相同。
要了解其工作原理,请参阅https://swiftui-lab.com/swiftui-id/