SwiftUI中的Geometry Reader是什么?
我正在学习SwiftUI。我遇到了“ GeometryReader”。我想知道为什么以及何时使用它?
回答:
回答:
GeometryReader是一个视图,使您可以访问父级的大小和位置。例如:
struct MyView: View { var body: some View {
GeometryReader { geometry in
// Here goes your view content,
// and you can use the geometry variable
// which contains geometry.size of the parent
// You also have function to get the bounds
// of the parent: geometry.frame(in: .global)
}
}
}
我通常将其与.background()结合使用以获得其他视图的范围。例如,“文本”视图很难预先预测它的大小。当我需要这些信息时,可以使用以下技巧:
首先,我定义了一个名为GeometryGetter的视图:
struct GeometryGetter: View { @Binding var rect: CGRect
var body: some View {
return GeometryReader { geometry in
self.makeView(geometry: geometry)
}
}
func makeView(geometry: GeometryProxy) -> some View {
DispatchQueue.main.async {
self.rect = geometry.frame(in: .global)
}
return Rectangle().fill(Color.clear)
}
}
然后,获取Text视图(或任何其他视图)的边界:
struct MyView: View { @State private var rect: CGRect = CGRect()
var body: some View {
Text("some text").background(GeometryGetter($rect))
// You can then use rect in other places of your view:
Rectangle().frame(width: 100, height: rect.height)
}
}
在GeometryGetter中,我添加了DispatchQueue.main.async {}来设置矩形。在某些情况下,否则可能会导致运行时警告:
在视图更新期间修改状态 。
以上是 SwiftUI中的Geometry Reader是什么? 的全部内容, 来源链接: utcz.com/qa/407421.html