swift - 如何在 SwiftUI 中为网格布局创建自定义大小的正方形
问题描述
我是 SwiftUI 的新手,一直在查看文档和教程,但似乎无法掌握如何创建我想要连续放置的任何大小的正方形。例如,如果我想要三个、四个或更多排成一行。
我想我会使用GeometryReader
,因为我不应该硬编码frame
? 我如何做到这一点,我会确保它在其他不同尺寸的设备上工作吗?
这是我正在尝试的示例。有三个项目。当我这样做时,第三个方块正在离开屏幕。
GeometryReader { geo in
HStack {
Rectangle()
.fill(Color.black)
.frame(width: geo.size.width / 3, height: 135)
Rectangle()
.fill(Color.black)
.frame(width: geo.size.width / 3, height: 135)
Rectangle()
.fill(Color.black)
.frame(width: geo.size.width / 3, height: 135)
}
}
解决方案
在其他选项中,您甚至可以使用GridItem
它,
检查下面的代码,
var columns : [GridItem] = [
GridItem(.flexible(), spacing: 8),
GridItem(.flexible(), spacing: 8),
GridItem(.flexible(), spacing: 8)
]
var body: some View {
ScrollView() {
LazyVGrid(columns: columns) {
Rectangle()
.fill(Color.pink)
.frame(height: 135)
Rectangle()
.fill(Color.black)
.frame(height: 135)
Rectangle()
.fill(Color.green)
.frame(height: 135)
}
.padding(.vertical)
}
}
推荐阅读
- python - 修复类的参数
- python - Python网页抓取打开新标签
- angular - web-animations-js 在 IE 9 SCRIPT5007 中给出错误:预期对象;网络动画.min.js (15,23868)
- oracle - 使用 SQL*Plus 运行具有多个命令提示符会话的多个脚本
- c# - 如何在事件发生后使用 Caliburn 默认检查方法?
- python - 使用 Jinja PrefixLoader 加载的模板内的相对路径导入
- oracle-maf - Oracle MAF 2.5.1 默认应用程序左上角奇怪的红色图标
- javascript - 如何使用 Angular 管道过滤掉空值?
- python - Python csv.DictReader 的内存使用问题
- python - 用 fsolve 求解非线性系统