SwiftUI中的Geometry Reader是什么?

SwiftUI中的Geometry Reader是什么?,第1张

SwiftUI中的Geometry Reader是什么? 更新

自从发布答案以来,我还写了一篇有关GeometryReader如何工作的文章。
查看它以获取更详细的说明:https :
//swiftui-lab.com/geometryreader-to-the-rescue/


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 {}来设置矩形。在某些情况下,否则可能会导致运行时警告:
在视图更新期间修改状态



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5087351.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存