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

Swiftui iOS 14帧尺寸无效(负或非有限),swiftui,ios14,geometryreader,Swiftui,Ios14,Geometryreader,我的应用程序使用带有一些填充的GeometryReader在NavigationView中设置图幅尺寸 从iOS 14开始,我收到以下错误消息: 框架尺寸无效(负或非有限) 下面是一些要测试的示例代码: import SwiftUI struct ContentView: View { let padding:CGFloat = 16.0 var body: some View { NavigationView { GeometryR

我的应用程序使用带有一些填充的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中容器视图的当前宽度和高度


有什么建议吗?

我认为这可能是一个静态分析问题,因为
.frame(width:p.size.width-padding)
可能会导致负值。尝试:

.frame(width: abs(p.size.width - padding))

当我使用macOS 11.1进行测试时,我发现
GeometryReader
无法在视图初始化开始时立即返回实际大小,第一次获得的大小不正确,可能需要执行调度异步操作以避免此警告


我遇到了同样的问题。我没有弄清楚为什么在
NavigationView
中会出现这种情况,但一个解决办法是将整个
NavigationView
包装在
GeometryReader
中,并将
GeometryProxy
传递到树下。

这对我有帮助:

我在主体中的第一个元素(是带有.frame的VStack)周围添加了一个组{}。该组没有“.frame”等。 我正在开发MacOS应用程序来解决这个愚蠢的问题

或者你可以加上类似的东西

.frame(minWidth: 300, idealWidth: 400, maxWidth: 600, minHeight: 300, idealHeight: 400, maxHeight: 500, alignment: .top)
到你的VStack(或任何东西),清楚地说出你想要的尺寸

编辑
奇怪的是,这个错误会再次出现,但不会立即出现…

这里也有同样的问题。虽然这似乎是对我的警告。一切正常,但此消息打印在XCode控制台中。此问题可能会有所帮助:如果给定负值,则会将视图宽度设置为该数字的正对应值(即,如果给定-5,则宽度为5)。如果这就是你想要的,那没关系,但是如果你没有预料到,那么它可能会导致一些令人惊讶的结果。