我想在屏幕的顶部1/3显示视图。为了做到这一点,我这样操作它:
var body: some View { VStack{ Spacer() Text("I like chipotle") Spacer() Spacer() } }
虽然这适用于较小的示例,但我想知道是否有一种更具声明性的方法来做到这一点,例如,如果我想将一个视图放在屏幕的顶部1/6?我想到了flex box,在这里你可以设置特定子元素的flex值,让它们占据不同的百分比。
6xfqseft1#
也许你的意思是这样的:
struct ContentView: View { let partOfScreen: CGFloat = 1/3 var body: some View { GeometryReader { geo in VStack(spacing: 0) { Text("I like chipotle") .padding(.top, geo.size.height * partOfScreen) Spacer(minLength: 0) } } } }
如果需要整个屏幕区域,可以在GeometryReader上添加.ignoresSafeArea(.all)
GeometryReader
.ignoresSafeArea(.all)
6l7fqoea2#
不需要任何Spacer您可以使用GeometryReader直接指定视图相对于其父视图的大小:
Spacer
GeometryReader { proxy in Text("I like Chipotle") .frame(height: proxy.size.height/3.rounded()) } }
始终尝试round位置和大小值。否则,它将严重影响渲染引擎渲染小数像素,您可能会遇到延迟和丢失帧。
round
2条答案
按热度按时间6xfqseft1#
也许你的意思是这样的:
如果需要整个屏幕区域,可以在
GeometryReader
上添加.ignoresSafeArea(.all)
6l7fqoea2#
不需要任何
Spacer
您可以使用GeometryReader
直接指定视图相对于其父视图的大小:💡快速提示
始终尝试
round
位置和大小值。否则,它将严重影响渲染引擎渲染小数像素,您可能会遇到延迟和丢失帧。