【发布时间】:2019-12-06 04:39:21
【问题描述】:
我开始探索 SwiftUI,但找不到简单的方法:我希望 View 具有成比例的高度(基本上是其父级高度的百分比)。假设我有 3 个垂直堆叠的视图。我要:
- 第一个高 43%(其父母身高)
- 第二个高 37%(其父级身高)
- 最后一个高 20%(其父级的高度)
我在 WWDC19 上观看了这个关于 SwiftUI 中的自定义视图 (https://developer.apple.com/videos/play/wwdc2019/237/) 的有趣视频,我明白(如果我错了,请纠正我)基本上视图本身从来没有大小,大小是它的孩子。因此,父视图询问其子视图他们有多高。他们的回答是:“你身高的一半!”然后什么?布局系统(即不同于我们习惯的布局系统)是如何处理这种情况的?
如果你写下面的代码:
struct ContentView : View {
var body: some View {
VStack(spacing: 0) {
Rectangle()
.fill(Color.red)
Rectangle()
.fill(Color.green)
Rectangle()
.fill(Color.yellow)
}
}
}
SwiftUI 布局系统将每个视图的大小调整为 1/3 高,根据我在上面发布的视频,这是正确的。 您可以通过这种方式将矩形包裹在一个框架中:
struct ContentView : View {
var body: some View {
VStack(spacing: 0) {
Rectangle()
.fill(Color.red)
.frame(height: 200)
Rectangle()
.fill(Color.green)
.frame(height: 400)
Rectangle()
.fill(Color.yellow)
}
}
}
这样布局系统将第一个矩形调整为 200 高,第二个调整为 400 高,第三个调整为适合所有剩余空间。再说一次,这很好。 您不能(通过这种方式)指定一个比例高度。
【问题讨论】:
-
您可以使用 GeometryReader 获取父级的大小自行计算。
-
根据链接上的幻灯片,家长可以为孩子提议一个尺码。然后孩子管理自己并创建与该命题的大小关系。当您执行上述操作时,您会得到什么结果?
-
@impression7vx 看看编辑。
标签: ios swift autolayout swiftui