☰
swiftui-ui-patterns - grids
2026/10/8 2:00:43 网站建设 项目流程

网格(Grids)

意图

对于图标选择器、媒体画廊以及条目按列对齐的密集视觉选择,使用LazyVGrid。

核心模式

  • 对应在不同设备尺寸下缩放的布局,使用.adaptive列。
  • 当需要固定列数时,使用多个.flexible列。
  • 保持间距一致且较小,避免不均匀的沟槽。
  • 需要方形缩略图时,在网格单元内使用GeometryReader。

示例:自适应图标网格

letcolumns=[GridItem(.adaptive(minimum:120,maximum:1024))]LazyVGrid(columns:columns,spacing:6){ForEach(icons){iconinButton{select(icon)}label:{ZStack(alignment:.bottomTrailing){Image(icon.previewName).resizable().aspectRatio(contentMode:.fit).cornerRadius(6)ificon.isSelected{Image(systemName:"checkmark.seal.fill").padding(4).tint(.green)}}}.buttonStyle(.plain)}}

示例:固定 3 列媒体网格

LazyVGrid(columns:[.init(.flexible(minimum:100),spacing:4),.init(.flexible(minimum:100),spacing:4),.init(.flexible(minimum:100),spacing:4),],spacing:4){ForEach(items){iteminGeometryReader{proxyinThumbnailView(item:item).frame(width:proxy.size.width,height:proxy.size.width)}.aspectRatio(1,contentMode:.fit)}}

应保留的设计选择

  • 对大型集合使用LazyVGrid;避免对大数据集使用非懒加载网格。
  • 需要时使用.contentShape(Rectangle())让点击目标全幅可点。
  • 对设置选择器和灵活布局,优先使用自适应网格。

陷阱

  • 避免在每个网格单元中放置重型覆盖层;这开销很大。
  • 没有明确理由时,不要在一个网格内嵌套另一个网格。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询