【发布时间】:2020-09-06 16:29:15
【问题描述】:
对于 iOS 14 和 iOS 13,Swift UI 动画在其父框架中的 View 位置的动画表现似乎有所不同。 我在下面的代码 sn-p 中的目标是仅动画调整按钮文本的大小,这应该在点击它时发生。 相反,在 iOS 14 中,按钮的位移(由 VStack 中的一个附加视图的切换可见性引起)也被动画化了。
相同的代码在 iOS 13(Xcode 11)和 iOS 14(Xcode 12 beta 6,macOS 11 beta)中产生不同的输出。 在 iOS 14 中,如何重现旧行为?
import SwiftUI
import PlaygroundSupport
struct ContentView: View {
@State var toggle = false
var body: some View {
VStack{
if self.toggle {
Rectangle().frame(width: 200, height: 200)
}
Button(action: {
self.toggle.toggle()
}){
Text("Tap me!")
.scaleEffect(self.toggle ? 2 : 1)
.animation(
Animation.easeInOut(duration: 1.5)
)
}
}
.frame(width: 400, height: 400)
}
}
PlaygroundPage.current.setLiveView(ContentView())
请注意,至少对我而言,同样的不良行为不仅发生在 Playground 中,还发生在 Xcode Previews 中的 iOS 14 以及模拟器和设备上(参见项目文件 https://github.com/himbeles/PositionAnimationExample):
【问题讨论】:
-
我认为这是 Playground 问题(此类事情发生在过渡/动画中)。在预览和模拟器中与 Xcode 12b5 / iOS 14 配合使用。
-
感谢您的反馈。嗯,不幸的是,不适合我,使用 Xcode 12 beta 6、iOS 14。既不是在设备上也不是在模拟器上。
-
它在 iOS14 中也适用于我。我正在看到所需的预览。一定是因为你在 PlaygroundPage 中预览.... PlaygroundPage.current.setLiveView(ContentView())
-
感谢您的所有反馈。但对我来说,它与游乐场无关。我已更新问题以包含直接在新的 XCode 12 beta 6 项目中运行的代码的屏幕截图,没有任何游乐场代码。
标签: ios swift animation swiftui