SwiftUI中的比例高度(或宽度)

时间:2019-07-28 18:08:05

标签: ios swift autolayout swiftui

我开始探索SwiftUI,但我找不到找到简单方法的方法(然后可能不是那么简单):我希望View具有成比例的高度(基本上是其父代高度的百分比)。假设我有3个垂直堆叠的视图。我想要:

  • 第一个高出其父母身高43%的人
  • 第二高是其父母身高的37%
  • 最后一个高出其父母身高的20%

使用旧的自动版式非常简单。我可以将每个视图的高度设置为其父视图的高度,然后将乘数设置为所需的值。

enter image description here

现在使用SwiftUI。我观看了WWDC19中关于SwiftUI(https://developer.apple.com/videos/play/wwdc2019/237/中的自定义视图的一段有趣的视频,并且我理解(如果我错了,请纠正我)基本上一个View本身没有大小,大小就是其大小孩子们。因此,父视图询问其子项的高度。他们的回答是:“身高减半!”然后什么?布局系统(与我们以前使用的布局系统不同)如何处理这种情况?它可以实际处理这种情况吗? (这很常见)。

1 个答案:

答案 0 :(得分:3)

import SwiftUI

struct ContentView: View {
    var body: some View {
        GeometryReader { metrics in
            VStack(spacing: 0) {
                Color.red.frame(height: metrics.size.height * 0.43).layoutPriority(1)
                Color.green.frame(height: metrics.size.height * 0.37)
                Color.yellow
            }
        }
    }
}

import PlaygroundSupport

PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView())