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

回到顶部