Skip to content

8.1_纯代码创建UICollectionView与Layout

准备好用纯代码创建你的 UICollectionView 和自定义布局了吗?这绝对是提升你的 iOS 开发技能的绝佳方式!让我们一起深入了解如何实现它,让你的网格视图栩栩如生。🎉

创建 UICollectionView

首先,你需要创建一个 UICollectionView 的实例。这可以通过以下步骤完成:

  1. 创建一个 UICollectionViewFlowLayout 实例,或者使用自定义的 UICollectionViewLayout
  2. 使用这个 layout 实例来初始化你的 UICollectionView
  3. UICollectionView 添加到你的视图层级中。
swift
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(collectionView)

这段代码创建了一个使用 UICollectionViewFlowLayoutUICollectionView,并禁用了自动约束,以便你可以手动设置约束。

设置 UICollectionView 的约束

为了让 UICollectionView 正确显示,你需要设置它的约束。这可以通过 NSLayoutConstraint 来完成。确保你的 UICollectionView 覆盖了你想要它占据的区域。

swift
NSLayoutConstraint.activate([
    collectionView.topAnchor.constraint(equalTo: view.topAnchor),
    collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])

这段代码将 UICollectionView 的顶部、底部、左侧和右侧锚点约束到父视图的相应锚点,使其填充整个视图。

自定义 UICollectionViewLayout

如果你想让你的 UICollectionView 拥有独特的布局,你可以自定义 UICollectionViewLayout。这需要创建一个继承自 UICollectionViewLayout 的类,并重写一些方法。

  • prepare(): 在布局计算之前调用,你可以在这里进行一些初始化工作。
  • collectionViewContentSize: 返回 UICollectionView 的内容大小。
  • layoutAttributesForElements(in rect: CGRect): 返回指定矩形内的所有单元格的布局属性。

示例:简单的自定义布局

让我们创建一个简单的自定义布局,将单元格排列成一个圆形。

swift
class CircularLayout: UICollectionViewLayout {

    override var collectionViewContentSize: CGSize {
        guard let collectionView = collectionView else { return .zero }
        return collectionView.bounds.size
    }

    override func prepare() {
        super.prepare()
        // 计算单元格的位置
    }

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        // 返回单元格的布局属性
        return nil
    }
}

这个例子只是一个开始。你可以根据你的需求,进一步自定义布局,例如,实现瀑布流布局、网格布局等等。

注册 Cell

不要忘记注册你的 UICollectionViewCell 类。这告诉 UICollectionView 如何创建和重用单元格。

swift
collectionView.register(MyCollectionViewCell.self, forCellWithReuseIdentifier: "MyCell")

现在,你已经准备好开始创建你自己的 UICollectionView 和自定义布局了!记住,实践是最好的老师。多尝试,多实验,你一定能掌握它!💪

本站使用 VitePress 制作