iOS 14 帧尺寸无效(负数或非有限)

我的应用程序使用带有一些填充的 GeometryReader 在 NavigationView 内设置视图框架尺寸。

从 iOS 14 开始,我收到以下错误消息:

无效的框架尺寸(负或非有限)

这是一些要测试的示例代码:

import SwiftUI

struct ContentView: View {

    let padding:CGFloat = 16.0

    var body: some View {
        NavigationView {
            GeometryReader { p in
        Text("Hello, world!")
            .frame(width: p.size.width - padding)
            .padding()
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

删除 NavigationView 可以解决问题,但我需要 NavigationView 中容器视图的当前宽度和高度。

有什么建议吗?

stack overflow iOS 14 Invalid frame dimension (negative or non-finite)
原文答案

答案:

作者头像

正如 Patric Fu 所说,这通常是一个初始化问题,会生成警告消息“帧尺寸无效(负数或非有限)”。

就我而言,此警告是在以下语句中生成的

.frame(width: frameSide, height: frameSide)

当使用以下语句生成 frameSide

let frameSide = min(innerRectangle.width, innerRectangle.height)

更改上述语句以提供如下默认值

let frameSide = innerRectangle.width.isNaN ? 0 : min(innerRectangle.width, innerRectangle.height)

解决了这个问题并且没有生成警告。

当然,三元运算符中的条件会根据变量“frameSide”的构造而有所不同。我发现这是一种比使用“调度异步操作”更简单的方法。如果将此答案作为对 Patric Fu 原始答案的评论附加,则更有可能有所帮助。但是,我没有足够的声誉发表评论。