首页 > 解决方案 > 如何修复适用于 SwiftUI 中文本的动画制作帧问题/错误?

问题描述

我想在文本视图上使用弹簧动画,但动画改变了这个视图的不必要的东西,这使得某些部分因为这个问题/错误而被剪掉。为了保守起见,我制作了一个带有背景颜色的精确文本视图,另一个没有!如您所见,弹簧动画应该只使用视图的位置或偏移量,而不是帧的大小!或者可能是因为在位置相同的情况下改变了偏移量。我坚信这是一个错误。我可以让我自己的自定义弹簧动画效果比这更好,但我想知道有什么办法可以解决这个问题吗?

PS:我发现Text上的各种动画都有这个问题!

    struct ContentView: View {
    
    @State var stringForText: String = String()
    
    var body: some View {
        
        
        Button("add") { stringForText += "?"}.padding()
            
        Text(stringForText).font(.largeTitle).bold().padding().animation(.spring(response: 1, dampingFraction: 0.01, blendDuration: 1))
            
        Text(stringForText).font(.largeTitle).bold().background(Color.yellow).padding().animation(.spring(response: 1, dampingFraction: 0.01, blendDuration: 1))
        
    }
}

在此处输入图像描述

标签: swiftui

解决方案


SwiftUI 中的修饰符受顺序影响。因此,在所有其他修饰符之后使用 .animation修饰符意味着 SwiftUI 将尝试为所有(可动画的)修饰符设置动画,例如 .padding 修饰符(实际上是可动画的)。

目前还不清楚预期的行为是什么,但是,通过应用上述解决方案,黄色背景大小保持不变,因为它的填充没有动画。

修复使用 .animation 时的填充变化:

在此处输入图像描述


推荐阅读