我需要在 SwiftUI
中获取渲染 View 的宽度,这显然不是那么容易。
我的看法是我需要一个返回 View 维度的函数,就这么简单。
var body: some View {
VStack(alignment: .leading) {
Text(timer.name)
.font(.largeTitle)
.fontWeight(.heavy)
Text(timer.time)
.font(.largeTitle)
.fontWeight(.heavy)
.opacity(0.5)
}
}
最佳答案
获取View
尺寸的唯一方法是使用GeometryReader
。读取器返回容器的尺寸。
什么是几何阅读器?文档说:
A container view that defines its content as a function of its own size and coordinate space. Apple Doc
所以你可以通过这样做来获得尺寸:
struct ContentView: View {
@State var frame: CGSize = .zero
var body: some View {
HStack {
GeometryReader { (geometry) in
self.makeView(geometry)
}
}
}
func makeView(_ geometry: GeometryProxy) -> some View {
print(geometry.size.width, geometry.size.height)
DispatchQueue.main.async { self.frame = geometry.size }
return Text("Test")
.frame(width: geometry.size.width)
}
}
打印的尺寸是作为内部 View 容器的HStack
的尺寸。
您可能会使用另一个 GeometryReader
来获取内部维度。
但请记住,SwiftUI 是一个声明式框架。所以你应该避免计算 View 的维度:
阅读更多示例:
关于swift - 在 SwiftUI 中使用获取 View 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57577462/