为具有可变数量的子视图

时间:2018-03-23 07:50:53

标签: ios swift uicollectionview

问题

  • 我从代码初始化了一个UICollectionView,并为其单元格注册了一个自定义类。自定义类有一些UIStackViews来布局一堆UILabel和UIViews。
  • 其中一个排列的子视图应包含可变数量的UIViews。为了减少抽象,我们将它们视为“座位”,显示参加此活动的用户的面孔(最多可以是四个,可以是无)

想到的解决方案

(我是新手)

解决方案1 ​​

  • 让自定义课程列出所有“座位”UIViews,以便我可以将它们视为占位符;
  • 让UICollectionView的cellForItemAt方法迭代数据源并取消隐藏已填充的“席位”

解决方案2

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

解决方案3

  • 注册5个不同的班级(零“座位”至“四个座位”)
  • 按照数据源的规定将每个队列出列
  • 在我看来,这一点似乎是最不尊严的,但可能是性能损失最小的那个

我完全清楚可能会有更多更好的解决方案。那么,实现这个可变数量的UIViews的最佳方法是什么?为什么呢?

编辑:

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

1 个答案:

答案 0 :(得分:0)

我提出解决方案3,因为它会更高效。 另外,我有两个建议:

  1. 避免使用UIStackView,因为它的布局性能较慢(基于AutoLayout)。另外,请尝试避免AutoLayoutUITableViewCell中的UICollectionViewCell以获得更好的效果。以下是一些最受欢迎且功能最强大的开源布局库PinLayoutLayoutKit
  2. 您可以编写基础UICollectionViewCell,在那里移动所有相关逻辑,然后使用最少的逻辑覆盖来创建所有需要的子类。