在 SwiftUI 中,网格滚动视图(类似于 UICollectionView)通过两个视图来完成的:LazyHGrid用于显示水平数据,以及LazyVGrid用于显示垂直数据。
就像惰性堆栈一样, SwiftUI 会自动延迟加载它包含的视图,直到需要它们的那一刻,这意味着我们可以显示更多数据,而无需消耗大量系统资源。
创建网格分两步完成。
- 首先,我们需要定义我们想要的行或列——我们只定义两者之一,具体取决于我们想要哪种类型的网格。如:我们希望创建一个垂直滚动的网格,数据布局为3列,宽度正好为 80 点
let layout = [
GridItem(.fixed(80)),
GridItem(.fixed(80)),
GridItem(.fixed(80))
]
- 定义布局后,将网格以及所需数量的项目放置在 ScrollView中。您在网格中创建的每个项目都会自动分配一列,就像列表中的行自动放置在其父项中一样
ScrollView (.vertical, showsIndicators: false){
LazyVGrid(columns: layout) {
ForEach(0..<1000) {
Text("口 \($0)")
}
}
}
但网格最好的部分是它们能够在各种屏幕尺寸上工作。这可以通过使用自适应大小的不同列布局来完成,如下所示:
let layout = [
GridItem(.adaptive(minimum: 80)),
]
这告诉 SwiftUI 容纳尽可能多的列,只要它们的宽度至少为 80 磅。您还可以指定最大宽度:
let layout = [
GridItem(.adaptive(minimum: 80, maximum: 120)),
]
建议依赖这些自适应布局,因为它们允许网格最大限度地利用可用的屏幕空间。
同理,水平滚动的网格类似