我有一段非常简单的代码,可以在 swiftui 静态预览中正确显示,并在 iOS 中正确运行。但是,当我选择 macOS 目标和实时预览时,整个层次结构从顶角反复向下移动。
这是我正在试验的代码(使用 Xcode 版本 12.3 (12C33)):
//
// BrokenAnimation.swift
//
import SwiftUI
struct BrokenAnimation: View {
@State var phase: CGFloat = 0
var body: some View {
ZStack(alignment: Alignment.topLeading) {
Rectangle()
.fill(Color.blue)
.frame(width: 1200, height: 1200)
Rectangle()
.stroke(style: StrokeStyle(lineWidth: 2, lineCap: .butt, lineJoin: .round, miterLimit: 1, dash: [5], dashPhase: phase))
.frame(width: 100, height: 100, alignment: Alignment.topLeading)
.foregroundColor(.white)
.onAppear {
withAnimation(Animation.linear.repeatForever(autoreverses: false)) {
self.phase += 10
}
}
}
}
}
struct BrokenAnimation_Previews: PreviewProvider {
static var previews: some View {
BrokenAnimation()
}
}
我的期望是它应该从屏幕的左上角(1200x1200)绘制一个纯蓝色矩形。然后它应该在其顶部绘制一个白色矩形,也在左上角,大小为 100x100。白色矩形用虚线描边,它应该为其相位设置动画 - 我期待在虚线矩形上看到爬行蚂蚁的效果。
但是,当我为 MacOS 选择“实时预览”时,它会创建一个带有预期蓝色矩形和白色虚线的窗口。但是整个 ZStack 从左上角反复向下移动。
这是 macOS 上 swiftui 中的错误吗?还是我在这里缺少什么?
如果我使用 VStack 而不是 ZStack,我会观察到类似的行为。