代码之家  ›  专栏  ›  技术社区  ›  user9469089

为具有可变子视图数的项实现UICollectionView单元

  •  0
  • user9469089  · 技术社区  · 7 年前

    问题

    • 我有一个从代码初始化的UICollectionView,并为其单元格注册了一个自定义类。自定义类有几个UIStackView来布局一组UILabel和UIView。
    • 其中一个排列的子视图应包含数量可变的UIView。为了使其不那么抽象,让我们把它们想象成“座位”,它将显示参加此活动的用户的脸(最多可以是四张,也可以没有)

    想到的解决方案

    (我是新手)

    解决方案1

    • 让自定义类列出所有“seat”UIView,以便我可以将它们视为占位符;
    • 让UICollectionViews cellForItemAt方法迭代数据源并取消隐藏已填满的座位

    解决方案2

    • 确保可以从UICollectionView的cellForItemAt方法引用自定义类中的UIStackView
    • 从cellForItemAt使用addArrangedSubview添加所有需要的座位

    解决方案3

    • 注册5个不同的类(0个到4个)
    • 根据数据源的指示,对每个数据进行出列
    • 在我看来,这是最不庄重的一个,但可能是表现最差的一个

    我非常清楚,可能会有更多更好的解决方案。那么,实现这个数量可变的UIView的最佳方式是什么,为什么?

    编辑:

    虽然我认为这里的单元格布局无关紧要,但有人要求我发布它 so here it is...

    1 回复  |  直到 7 年前
        1
  •  0
  •   Misternewb    7 年前

    我提出了解决方案3,因为它的性能会更好。 此外,我有两个建议:

    1. 避免使用 UIStackView ,因为它的布局性能较慢(它基于 AutoLayout )。此外,尽量避免 自动布局 在里面 UITableViewCell UICollectionViewCell 以获得更好的性能。以下是一些最流行、功能最强大的开源布局库 PinLayout ,则, LayoutKit
    2. 您可以编写base UICollectionViewCell ,将所有相关的逻辑移到那里,然后只需使用最小的逻辑重写来生成所有需要的子类。