【问题标题】:iOS 14 Invalid frame dimension (negative or non-finite)iOS 14 帧尺寸无效(负数或非有限)
【发布时间】:2023-03-08 12:30:01
【问题描述】:

我的应用使用带有一些填充的 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 的当前宽度和高度。

有什么建议吗?

【问题讨论】:

  • 这里有同样的问题。虽然这似乎是对我的警告。一切都按预期工作,但此消息打印在 XCode 控制台中
  • 这个问题可能会有所帮助:stackoverflow.com/questions/64543714/…

标签: swiftui ios14 geometryreader


【解决方案1】:

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

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

【讨论】:

  • 如果给定一个负值,它会将视图的宽度设置为该数字的正对应值(即,如果给定 -5,宽度将为 5)。如果这就是您要寻找的东西,那没关系,但如果您没有预料到,那么它可能会导致一些令人惊讶的结果。
【解决方案2】:

我在macOS 11.1上测试时发现GeometryReader在view init开始时无法立即返回实际大小,第一次得到的大小不正确,可能需要做一个dispatch async操作来避免这个警告

【讨论】:

    【解决方案3】:

    这对我有帮助:

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

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

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

    到您的 VStack(或其他)清楚地说明您想要什么尺寸。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        试试这个,对我有用~

        .frame(width:abs(GeometryReader_width)))
        

        【讨论】:

          猜你喜欢
          • 2022-12-25
          • 2013-12-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-19
          • 1970-01-01
          • 2021-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多