WaterfallGrid

WaterfallGrid

SwiftUI瀑布流网格布局视图库

WaterfallGrid是一个SwiftUI瀑布流网格布局库,支持不规则内容、自定义列数、间距和填充。它提供水平或垂直滚动选项,适用于多种数据类型,并支持元素更新动画。该库简单易用,功能丰富,适合实现复杂的网格布局。

WaterfallGridSwiftUI网格布局自定义视图Swift包Github开源项目

WaterfallGrid

一个适用于SwiftUI的瀑布流网格布局视图。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/2b54e442/d9daab67-aa93-4bfa-8e8f-a120c6404402.png" alt="Image Demo 1"/> </p>

特性

  • 不规则内容网格。
  • 根据设备方向可设置不同的列数。
  • 可自定义间距和网格内边距。
  • 水平或垂直滚动方向。
  • 可以为项目更新添加动画效果。

使用方法

初始化

你可以通过传递数据集合和为集合中每个元素提供视图的闭包来创建一个显示集合元素的网格。网格使用提供的闭包将集合中的每个元素转换为子视图。

WaterfallGrid适用于可识别的数据(类似于SwiftUI.List)。你可以通过两种方式使你的数据可识别:与数据一起传递一个能唯一标识每个元素的属性的键路径,或者让你的数据类型遵循Identifiable协议。

示例1

从通过键路径标识的数据集合创建一个Image类型视图的网格。

WaterfallGrid((0..<10), id: \.self) { index in Image("image\(index)") .resizable() .aspectRatio(contentMode: .fit) }

示例2

从Identifiable数据集合创建一个RectangleView类型视图的网格。

WaterfallGrid(rectangles) { rectangle in RectangleView(rectangle: rectangle) }

或者,对于简单情况,可以这样写:

WaterfallGrid(rectangles, content: RectangleView.init)

网格样式

要自定义网格的外观,调用gridStyle函数并传入你想要自定义的参数。

列数

WaterfallGrid(cards) { card in CardView(card: card) } .gridStyle(columns: 2)
WaterfallGrid(cards, content: CardView.init) .gridStyle( columnsInPortrait: 2, columnsInLandscape: 3 )

间距和内边距

WaterfallGrid(rectangles, content: RectangleView.init) .gridStyle(spacing: 8) .padding(EdgeInsets(top: 16, leading: 8, bottom: 16, trailing: 8))

动画

WaterfallGrid(rectangles, content: RectangleView.init) .gridStyle(animation: .easeInOut(duration: 0.5))

滚动行为

嵌入ScrollView和指示器选项

ScrollView(showsIndicators: true) { WaterfallGrid(rectangles, content: RectangleView.init) }

水平滚动方向

ScrollView(.horizontal) { WaterfallGrid(rectangles, content: RectangleView.init) .scrollOptions(direction: .horizontal) }
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/2b54e442/c857cd22-3006-42b3-8808-fcd26169625f.gif" alt="Animation Demo 4"/> <img src="https://yellow-cdn.veclightyear.com/2b54e442/90eb04da-ccf6-4ad4-89f1-29ef090ccf43.gif" alt="Animation Demo 5"/> </p>

完整示例

ScrollView(.horizontal, showsIndicators: false) { WaterfallGrid(cards) { card in CardView(card: card) } .gridStyle( columnsInPortrait: 2, columnsInLandscape: 3, spacing: 8, animation: .easeInOut(duration: 0.5) ) .scrollOptions(direction: .horizontal) .padding(EdgeInsets(top: 16, leading: 8, bottom: 16, trailing: 8)) }

示例应用

探索WaterfallGridSample应用以获取更详细和交互式的示例。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/2b54e442/c22cc9d8-8bcc-40d9-99d6-52aec2903509.gif" alt="Animation Demo 1" width="250"/>&nbsp; <img src="https://yellow-cdn.veclightyear.com/2b54e442/4e708137-9c3e-474f-9a8e-904e26c00aec.gif" alt="Animation Demo 2" width="250"/>&nbsp; <img src="https://yellow-cdn.veclightyear.com/2b54e442/dfbeb43e-3657-44d2-918a-a25876a6f586.gif" alt="Animation Demo 3" width="250"/> </p> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/2b54e442/f068fb1c-805c-4f8f-ba29-e80a1bd7fb63.png" alt="Image Demo 3"/> </p> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/2b54e442/3ed5c739-e664-40ca-b0a4-3722007398b8.png" alt="Image Demo 2"/> </p>

安装

Swift Package Manager

应用依赖

选择File > Swift Packages > Add Package Dependency,然后输入仓库URL(向你的应用添加包依赖

包依赖

在你的Package.swift清单中添加它作为依赖:

dependencies: [ .package(url: "https://github.com/paololeonardi/WaterfallGrid.git", from: "1.1.0") ]

CocoaPods

你可以通过在Podfile中添加以下行来通过CocoaPods安装WaterfallGrid:

pod 'WaterfallGrid', '~> 1.1.0'

运行pod install命令下载库并将其集成到你的Xcode项目中。

迁移指南

版本控制

有关可用版本,请参阅此仓库的发布版本

贡献

非常欢迎贡献。在提交拉取请求之前,请创建一个GitHub问题以计划和讨论实现。

作者

致谢

WaterfallGrid的灵感来自以下项目:

许可证

WaterfallGrid 可在 MIT 许可下使用。更多信息请查看 LICENSE 文件。

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

下拉加载更多