LazyCollectionView

SPM Compatible Platform License

一个将 UICollectionView 移植到 SwiftUI 的初步尝试。

Sample

目录

描述

此组件的目标是将 UIKit 的 UICollectionView 的灵活性带到 SwiftUI,特别是对于自定义布局。它可以轻松地嵌入 ScrollView 中,并且像 LazyVStack 一样支持对其内容进行懒加载。

它在 Unsplash iOS 应用程序中用于以列布局显示照片列表。它也适用于 macOS,但尚未在该平台上进行全面测试。

它最适合显示大量项目,这些项目将受益于 ScrollView 中的懒加载。否则,iOS 16 和 macOS 13 中引入的 Layout API 是更好的选择。

欢迎改进和更多示例布局!

⚠️示例项目中的列表和网格布局只是示例,不应在其外部使用。您应该分别使用 LazyVStackLazyVGrid

要求

安装

LazyCollectionView 可通过 Swift Package Manager 获取。要安装它,请按照以下步骤操作

  1. 在 Xcode 中,点击 “File”,然后点击 “Swift Package Manager”,再点击 “Add Package Dependency”
  2. 选择您的项目
  3. 在搜索栏中输入此 URL https://github.com/unsplash/swiftui-lazycollectionview.git

用法

第一步是创建一个布局对象,这是一个采用 LazyCollectionLayoutObservableObject 协议的类。此对象负责为 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 不会在滚动视图内部添加其子视图。这使得它可以轻松地与父滚动视图内部的其他视图(页眉、页脚等)混合使用。

组件

1. LazyCollectionView

一个使用可自定义布局呈现有序数据项集合的视图。

参数

2. LazyCollectionLayout

一种类型,用于计算懒加载集合视图中项目的布局方式。

3. LazyCollectionLayoutAttributes

一个布局对象,用于保存 LazyCollectionView 中给定项目的布局相关属性。它由 LazyCollectionViewLayout 的实例创建,并由 LazyCollectionView 用于布局其内容。

改进

以下是一些潜在改进的简短列表。

许可

MIT 许可证

版权所有 (c) 2022 Unsplash Inc.

特此授予许可,任何人均可免费获得本软件以及相关文档文件(“软件”),不受限制地处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件副本的权利,并允许向其提供本软件的人员在符合以下条件的情况下这样做

上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。

本软件按“现状”提供,不作任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面,因本软件或本软件的使用或其他处理而产生、源于本软件或与之相关。