SwiftUI - 如何从不同的视图中获取 GeometryReader 的大小/高度?
Posted
技术标签:
【中文标题】SwiftUI - 如何从不同的视图中获取 GeometryReader 的大小/高度?【英文标题】:SwiftUI - How to get GeometryReader size/height from different View? 【发布时间】:2021-04-25 19:34:58 【问题描述】:如何从另一个视图访问一个视图的大小?
为了获得“Hello world!”文本的高度,我在其上附加了 .background()
或 GeometryReader
。目前,我只是使用let _ = print(proxy.size.height)
打印高度。
struct ContentView: View
var body: some View
VStack
Text("Hello world!")
.background(
GeometryReader proxy in
Color.clear /// placeholder
let _ = print(proxy.size.height) /// 20.333333333333332
)
Text("Height of first text is ???")
结果:
我现在想用“Hello world!”的高度替换???
。我该怎么做?
【问题讨论】:
类似问题:***.com/a/59733037/14351818 【参考方案1】:你可以:
-
创建一个
@State
属性来存储高度
使用附加到Color.clear
的.onAppear
设置它
将???
替换为\(textHeight)
struct ContentView: View
@State var textHeight = CGFloat(0) /// 1.
var body: some View
VStack
Text("Hello world!")
.background(
GeometryReader proxy in
Color.clear
.onAppear /// 2.
textHeight = proxy.size.height
)
/// 3.
Text("Height of first text is \(textHeight)")
结果:
【讨论】:
onAppear
仅在它出现时被调用,因此它不处理方向变化。
我在 WWDC21 期间与一位 Apple 工程师交谈,他们说要处理方向,请附上 .onChange
。以上是关于SwiftUI - 如何从不同的视图中获取 GeometryReader 的大小/高度?的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:如何从 OutlineGroup 中获取选择?
从公共 API 获取 JSON 以在 SwiftUI 的列表视图中呈现