swiftui - 质疑 SwiftUI 中 Spacers 的动态性
问题描述
我从多个地方听说垫片是动态的/相对于不同的屏幕尺寸。我一直将它们用作我布局的重要部分,但它们让我失望了。如果我使用不正确,有人可以告诉我吗?这是一个矩形的示例,上面有一个 HStack 正方形。由于矩形一开始就很大,而且我还需要将它向下推到屏幕上,所以我使用了很多垫片(这似乎没有必要)。我尝试过使用填充,但它并没有按我的需要向下推。在我提供的代码之后,您将看到两张图片。一个是 iPod touch(第 7 代),另一个是 iPhone 12 Pro Max。跨设备的布局完全不匹配。我的目标是让这两款设备都拥有 iPod touch 所拥有的布局部分。
ZStack {
VStack {
ForEach(1..<38) { _ in
Spacer()
}
Rectangle()
.fill(Color.blue)
}
VStack {
Spacer()
Spacer()
HStack {
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
Rectangle()
.scaledToFit()
}
Spacer()
}
}
解决方案
你不应该需要多个Spacer()
GeometryReader { geometry in
VStack {
Spacer()
VStack {
HStack {
ForEach(0..<5) {_ in
Rectangle()
.scaledToFit()
}
}
.padding(.vertical)
Spacer()
}
.background(Color.blue)
.frame(height: geometry.size.height * 0.4)
}
}
这是你想要达到的目标吗?如果您知道蓝色背景视图的大小,我现在将其设置为相对于屏幕高度的 40%,然后Spacer()
将用空间填充屏幕的其余部分。
推荐阅读
- arrays - 在 Swift UI 中的结构数组上运行函数
- python - 我的 Python MAC_changer 程序在 if elif 和 else 语句部分有问题
- python - 在 Google Colab 上的 R 笔记本中安装 python 库
- python - 检查两个数据帧之间的部分字符串匹配
- python - 调用具有不同名称的函数
- excel - 将值复制到不同的工作簿
- openmdao - 如何设置嵌套驱动程序/优化器?
- html-table - 在 blueprintjs 表中创建排序
- python - 寻求用 Python 编写这个简单代码的更短的方法
- json - 如何解组代表不同类型数据数组的 JSON?