一个将 UICollectionView 移植到 SwiftUI 的初步尝试。
此组件的目标是将 UIKit 的 UICollectionView
的灵活性带到 SwiftUI,特别是对于自定义布局。它可以轻松地嵌入 ScrollView
中,并且像 LazyVStack
一样支持对其内容进行懒加载。
它在 Unsplash iOS 应用程序中用于以列布局显示照片列表。它也适用于 macOS,但尚未在该平台上进行全面测试。
它最适合显示大量项目,这些项目将受益于 ScrollView
中的懒加载。否则,iOS 16 和 macOS 13 中引入的 Layout API 是更好的选择。
欢迎改进和更多示例布局!
LazyVStack
和 LazyVGrid
。
LazyCollectionView 可通过 Swift Package Manager 获取。要安装它,请按照以下步骤操作
https://github.com/unsplash/swiftui-lazycollectionview.git
第一步是创建一个布局对象,这是一个采用 LazyCollectionLayout
和 ObservableObject
协议的类。此对象负责为 LazyCollectionView 中的所有视图生成 frame。示例项目中的布局可以用作参考。
以下是使用 LazyCollectionView 的典型方法。
GeometryReader { geometryProxy in
let parentFrame = geometryProxy.frame(in: .local)
ScrollView {
LazyCollectionView(data: myArray,
layout: myCustomLayout,
parentFrame: parentFrame) { item in
ItemView(item)
}
}
}
为了使懒加载工作,重要的是为 parentFrame
属性设置一个值。
请注意,与 UICollectionView
不同,LazyCollectionView 不会在滚动视图内部添加其子视图。这使得它可以轻松地与父滚动视图内部的其他视图(页眉、页脚等)混合使用。
一个使用可自定义布局呈现有序数据项集合的视图。
data
:LazyCollectionView 实例用于动态创建视图的已标识数据。layout
:计算视图位置的布局对象。parentFrame
(可选):实例的父视图的 frame。content
:动态创建视图的视图构建器。一种类型,用于计算懒加载集合视图中项目的布局方式。
一个布局对象,用于保存 LazyCollectionView 中给定项目的布局相关属性。它由 LazyCollectionViewLayout
的实例创建,并由 LazyCollectionView
用于布局其内容。
以下是一些潜在改进的简短列表。
parentFrame
参数,因为它增加了使用的复杂性。MIT 许可证
版权所有 (c) 2022 Unsplash Inc.
特此授予许可,任何人均可免费获得本软件以及相关文档文件(“软件”),不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向其提供本软件的人员在符合以下条件的情况下这样做
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。
本软件按“现状”提供,不作任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,因本软件或本软件的使用或其他处理而产生、源于本软件或与之相关。