有没有更好的方法在Swift UI中使用重复的Spacers?

pgvzfuti  于 2023-06-21  发布在  Swift
关注(0)|答案(2)|浏览(139)

我想在屏幕的顶部1/3显示视图。为了做到这一点,我这样操作它:

var body: some View {
 VStack{
  Spacer()
  Text("I like chipotle")
  Spacer()
  Spacer()
 }
}

虽然这适用于较小的示例,但我想知道是否有一种更具声明性的方法来做到这一点,例如,如果我想将一个视图放在屏幕的顶部1/6?我想到了flex box,在这里你可以设置特定子元素的flex值,让它们占据不同的百分比。

6xfqseft

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)

6l7fqoea

6l7fqoea2#

不需要任何Spacer您可以使用GeometryReader直接指定视图相对于其父视图的大小:

GeometryReader { proxy in
    Text("I like Chipotle")
        .frame(height: proxy.size.height/3.rounded())
    }
}

💡快速提示

始终尝试round位置和大小值。否则,它将严重影响渲染引擎渲染小数像素,您可能会遇到延迟和丢失帧。

相关问题