作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想更新一个没有任何插入动画的 SwiftUI 列表。
我的 List
正在从 @EnvironmentObject
获取数据
我已经尝试包装 List
本身和 PassthroughSubject.send()
在 withAnimation(.empty)
阻止,但这无济于事。
一个非常非常肮脏的解决方法是调用 UIView.setAnimationsEnabled(false)
(是的,UIKit 对 SwiftUI 有影响),但必须有一种类似 SwiftUI 的方式来设置自定义插入动画。
最佳答案
虽然 DogCoffee 提供的答案有效,但它的效率很低。有时我们确实不得不通过低效来强制系统做我们想做的事情。对于 SwiftUI 中的隐式动画,有更好的方法来禁用它们。
使用 Transaction在 SwiftUI 机制中,我们可以定义一个可以应用于任何 View 的扩展。这将禁用 View 和任何子项的动画。
对于 ListView 示例,这避免了将列表中的所有数据替换为新的但相同的副本。
extension View {
func animationsDisabled() -> some View {
return self.transaction { (tx: inout Transaction) in
tx.disablesAnimations = true
tx.animation = nil
}.animation(nil)
}
}
尝试将此扩展应用于您的列表或包含 View 的父级。您可能需要进行试验才能找到理想的 View 。
List {
// for each etc
}.animationsDisabled()
关于ios - 如何在没有动画的情况下更新 SwiftUI 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533511/
我是一名优秀的程序员,十分优秀!