我的应用程序使用带有某些填充的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的当前宽度和高度。
有什么建议吗?
答案 0 :(得分:5)
我认为这可能是静态分析问题,因为.frame(width: p.size.width - padding)
可能会导致负值。试试:
.frame(width: abs(p.size.width - padding))
答案 1 :(得分:0)
答案 2 :(得分:0)
我遇到了同样的问题。我没有深入了解为什么在 NavigationView
中会导致这种情况,但解决方法是将整个 NavigationView
包装在 GeometryReader
中并将 GeometryProxy
向下传递树。
答案 3 :(得分:0)
这对我有帮助:
我在主体中的第一个元素(它是一个带有 .frame 的 VStack)周围添加了一个 Group { }。该组没有“.frame”等。 在我的 MacOS 应用程序上工作以摆脱这个愚蠢的问题。
或者你可以添加类似的东西
.frame(minWidth: 300, idealWidth: 400, maxWidth: 600, minHeight: 300, idealHeight: 400, maxHeight: 500, alignment: .top)
到您的 VStack(或其他),明确说明您想要什么尺寸。
编辑 奇怪这个错误会再次出现,但不会立即出现...