GeometryReader 对提取的视图表现异常
GeometryReader behaves oddly with an extracted view
在此示例中,“hello”文本如预期一样放置在屏幕中间。
struct ContentView: View {
var body: some View {
GeometryReader { geo in
Text("hello")
.background(Color.green)
}
.background(Color.blue)
}
}
但是当我 Text
移动到提取的视图时,“你好”文本移动到屏幕的左上角。
struct ContentView: View {
var body: some View {
GeometryReader { geo in
ExtractedView()
}
.background(Color.blue)
}
}
struct ExtractedView: View {
var body: some View {
Text("hello")
.background(Color.green)
}
}
这是错误还是我不理解的预期行为?
确认 Xcode 12 / iOS 14 的左上角位置。我不认为这是一个错误。实际上,GeometryReader
不是一个容器并且没有(不应该)有自己的默认对齐方式,它的目的是自定义对齐方式,所以我们在这里。
可能的解决方案(使用 Xcode 12b3 / iOS 14 测试):
- 按位置排列
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)
}
在此示例中,“hello”文本如预期一样放置在屏幕中间。
struct ContentView: View {
var body: some View {
GeometryReader { geo in
Text("hello")
.background(Color.green)
}
.background(Color.blue)
}
}
但是当我 Text
移动到提取的视图时,“你好”文本移动到屏幕的左上角。
struct ContentView: View {
var body: some View {
GeometryReader { geo in
ExtractedView()
}
.background(Color.blue)
}
}
struct ExtractedView: View {
var body: some View {
Text("hello")
.background(Color.green)
}
}
这是错误还是我不理解的预期行为?
确认 Xcode 12 / iOS 14 的左上角位置。我不认为这是一个错误。实际上,GeometryReader
不是一个容器并且没有(不应该)有自己的默认对齐方式,它的目的是自定义对齐方式,所以我们在这里。
可能的解决方案(使用 Xcode 12b3 / iOS 14 测试):
- 按位置排列
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)
}