Swiftui GeometryReader在提取视图时表现异常 在此示例中,“Hello”文本被放置在屏幕的中间,如预期的那样。 struct ContentView:View{ var body:一些观点{ GeometryReader{geo-in 文本(“你好”) .背景(颜色.绿色) } .背景(颜色.蓝色) } }

Swiftui GeometryReader在提取视图时表现异常 在此示例中,“Hello”文本被放置在屏幕的中间,如预期的那样。 struct ContentView:View{ var body:一些观点{ GeometryReader{geo-in 文本(“你好”) .背景(颜色.绿色) } .背景(颜色.蓝色) } },swiftui,geometryreader,Swiftui,Geometryreader,但是当我将Text移动到提取的视图时,“hello”文本会移动到屏幕的左上角 struct ContentView:View{ var body:一些观点{ GeometryReader{geo-in ExtractedView() } .背景(颜色.蓝色) } } struct ExtractedView:视图{ var body:一些观点{ 文本(“你好”) .背景(颜色.绿色) } } 这是一个bug,还是一个我不理解的预期行为?确认Xcode 12/iOS 14上左上角的位置。我不认为

但是当我将
Text
移动到提取的视图时,“hello”文本会移动到屏幕的左上角

struct ContentView:View{
var body:一些观点{
GeometryReader{geo-in
ExtractedView()
}
.背景(颜色.蓝色)
}
}
struct ExtractedView:视图{
var body:一些观点{
文本(“你好”)
.背景(颜色.绿色)
}
}

这是一个bug,还是一个我不理解的预期行为?

确认Xcode 12/iOS 14上左上角的位置。我不认为这是一个错误。实际上,
GeometryReader
不是一个容器,也不(不应该)有自己的默认对齐方式,它的目的是自定义对齐方式,所以我们来了

可能的解决方案(使用Xcode 12b3/iOS 14测试):

  • 按位置排列
  • 包装到全尺寸堆栈容器中(具有默认对齐方式)

  • 无法使用Xcode 11.5、iOS 13.5(SwiftUI 1.0)进行复制。@pawello2222我使用的是Xcode 11.6。Xcode 11.5中您看到了什么?在这两种情况下都是一样的:文本“hello”以绿色背景显示,其余部分以蓝色背景显示。@pawello2222在这两种情况下,“hello”都居中?是的,在这两种情况下。谢谢您的确认。但如果它不是一个容器,为什么它的行为与我的第一个示例中的一样?直接使用某些东西与在提取视图中使用有什么区别?
    GeometryReader { geo in
        ExtractedView()
            .position(x: geo.size.width / 2, y: geo.size.height / 2)
    }
    
    GeometryReader { geo in
        VStack {
            ExtractedView()
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }