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



>问题

  • 我有一个从代码初始化的 UICollectionView,我为其单元格注册了一个自定义类。自定义类有一些UIStackViews来布置一堆UILabels和UIViews。
  • 其中一个排列的子视图应包含可变数量的 UIView。为了使它不那么抽象,让我们将它们视为"座位",将显示参加此活动的用户的面孔(最多可以有四个,也可以没有)

想到的解决方案

(我是新手)

解决方案 1

  • 让自定义类布置所有"座位"UIViews,以便我可以将它们视为占位符;
  • 让 UICollectionView 的 cellForItemAt 方法遍历数据源并取消隐藏已填充的"席位">

解决方案 2

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

解决方案 3

  • 注册5个不同的类别(零"座位"到"四个座位")
  • 根据数据源的规定取消排队
  • 在我看来,这个是最不体面的,但可能是表现损失最小的一个

我完全知道可以有更多更好的解决方案。那么,实现这种可变数量的 UIViews 的最佳方法是什么,为什么?

编辑:

虽然我认为这里的单元格布局无关紧要,但有人要求我发布它 所以它在这里...

我建议解决方案3,因为它的性能会更高。 另外,我有两个建议:

  1. 避免使用UIStackView,因为它的布局性能很慢(它基于AutoLayout)。此外,尽量避免UITableViewCellUICollectionViewCell中的AutoLayout以获得更好的性能。以下是一些最流行和最强大的开源布局库PinLayout,LayoutKit。
  2. 您可以编写基本UICollectionViewCell,将所有相关逻辑移动到那里,然后仅使用最少的逻辑覆盖创建所有需要的子类。

相关内容

  • 没有找到相关文章