gpt4 book ai didi

ios - 如何在没有动画的情况下更新 SwiftUI 列表

转载 作者:行者123 更新时间:2023-12-01 10:17:38 24 4
gpt4 key购买 nike

我想更新一个没有任何插入动画的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com