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内的容器View的当前宽度和高度。

有什么建议吗?

解决方法

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

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

当我使用macOS 11.1进行测试时,我发现11-31无法在视图init的开头立即立即返回实际大小,这是首次获得的大小不正确,可能需要执行分派异步避免此警告的操作

Warning: Invalid frame dimension (negative or non-finite)

,

我遇到了同样的问题。我没有深入了解为什么在 NavigationView 中会导致这种情况,但解决方法是将整个 NavigationView 包装在 GeometryReader 中并将 GeometryProxy 向下传递树。

,

这对我有帮助:

我在主体中的第一个元素(它是一个带有 .frame 的 VStack)周围添加了一个 Group { }。该组没有“.frame”等。 在我的 MacOS 应用程序上工作以摆脱这个愚蠢的问题。

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

.frame(minWidth: 300,idealWidth: 400,maxWidth: 600,minHeight: 300,idealHeight: 400,maxHeight: 500,alignment: .top)

到您的 VStack(或其他),明确说明您想要什么尺寸。

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