我正在使用Swift和SwiftUI构建一个iOS应用程序。我多次测试设备旋转动画,因为我希望它支持横向模式。我发现ContentView(或任何子视图)的宽度变化在旋转设备时有延迟,导致Black Side在一瞬间显示。
怎么解决呢?
@main
struct TESTApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
// ContentView
struct ContentView: View {
var body: some View {
GeometryReader { geo in
Rectangle()
.ignoresSafeArea()
.foregroundColor(.blue)
}
}
}
正如你所看到的,我已经将矩形的前景(或背景)设置为蓝色,并使用GeometryReader(如.frame(width: geo.size.width)
)设置宽度,当父对象发生变化时,它应该自动调整宽度或高度。但是在旋转时,宽度不能实时扩展,这就是为什么我们可以在那里看到黑色背景的原因。
我已经试过.ignoresSafeArea()
了,它不起作用。
那么如何解决呢?
1条答案
按热度按时间xqkwcwgp1#
您可以在GeometryReader中添加
.id()
修改器,以在设备旋转期间强制更新布局。根据屏幕的宽度和高度分配唯一的ID,该ID将在设备旋转时更改。以下是更新后的代码:当设备旋转时,ID会发生变化,导致SwiftUI重新创建视图并快速适应新的方向。这应该有助于防止在旋转动画期间出现黑边。