← 返回文章

UIKit · CollectionView

UICollectionView 列表页的稳定结构

复杂列表变难维护,通常不是 UICollectionView 本身的问题,而是 cell 承担了太多业务。一个稳定的列表页应该把数据、布局、事件和副作用拆开。

Section Model 是页面协议

把页面拆成明确 section:header、banner、feed、empty、footer。每个 section 声明自己的 item、布局和展示规则,ViewController 只负责组合。

enum HomeSection: Hashable {
    case profile
    case shortcuts
    case feed
}

enum HomeItem: Hashable {
    case profile(ProfileViewData)
    case shortcut(ShortcutViewData)
    case article(ArticleViewData)
}

Cell 只接收 ViewData

cell 不应该知道接口模型、埋点规则或跳转逻辑。它接收已经整理好的 ViewData,暴露按钮点击闭包或 delegate 事件。

Diffable 不是万能解药

Diffable Data Source 可以减少 reload 错误,但 hash 稳定性要靠你保证。不要把会频繁变化的展示状态混进 identity,否则动画和复用会变得不可预测。