Geo*_*e_E 10
查看GeometryReader。它允许您获取当前视图的大小:
struct ContentView: View {
var body: some View {
GeometryReader { geo in
VStack {
Text("Hello World!")
Text("Size: (\(geo.size.width), \(geo.size.height))")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例,您可以在屏幕上拖动以更改色调值:
struct ContentView: View {
@State private var hue: CGFloat = 0
var body: some View {
GeometryReader { geo in
ZStack {
Color.white
.gesture(DragGesture().onChanged({ value in
self.hue = value.location.y / geo.size.height
}))
VStack {
Text("Hello World!")
Text("Size: (\(geo.size.width), \(geo.size.height))")
Text("Hue: \(self.hue)")
}.allowsHitTesting(false)
}
}
.edgesIgnoringSafeArea(.all)
}
}
Run Code Online (Sandbox Code Playgroud)
GeometryReader打破你的视图布局?看看这个要点。
为了完整起见,GeometryReader将返回容器的大小。由于OP明确提到了屏幕尺寸,因此可能值得一提UIScreen类别。我们可以使用UIScreen.main.bounds.width和UIScreen.main.bounds.height来获取屏幕尺寸,而无需使用 GeometryReader。可能值得补充的是,GeometryReader 结果反映了容器的大小,这与UIScreen返回的结果不同
import SwiftUI
struct ContentView: View {
var body: some View {
GeometryReader {geometry in
VStack {
Text("Sizes")
.font(.title)
VStack {
Text("Screen width via UIScreen: \(Int(UIScreen.main.bounds.width))")
Text("Screen height via UIScreen: \(Int(UIScreen.main.bounds.height))")
Text("This VStack height: \(Int(geometry.size.height))")
Text("This VStack width: \(Int(geometry.size.width))")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |