我们可能在一些情况下需要获取SwiftUI的一个View的尺寸,我们可以用以下方法获取:
.overlay(GeometryReader { geo -> AnyView in
DispatchQueue.main.async{
self.displayWidth = geo.size.width
self.displayHeight = geo.size.height
}
return AnyView(EmptyView())
})
让我们来举个例子!我们来获取一个Text的View的尺寸以及其他参数:
struct ContentView: View {
@State private var displayWidth: CGFloat = 0
@State private var displayHeight: CGFloat = 0
@State private var widthAndHeight = ""
var body: some View {
VStack {
Text("Hello, world!")
.padding()
.overlay(GeometryReader { geo -> AnyView in
DispatchQueue.main.async{
displayWidth = geo.size.width
displayHeight = geo.size.height
widthAndHeight = geo.size.debugDescription
}
return AnyView(EmptyView())
})
Text("宽度:\(displayWidth)")
Text("高度:\(displayHeight)")
Text("宽高:\(widthAndHeight)")
}
}
}
界面如下:
这里需要注意的是:这里的尺寸是包括padding的,也就是说,附加在这个View视图上的东西的尺寸超过本身尺寸的话,也会计算在内。