>问题
- 我有一个从代码初始化的 UICollectionView,我为其单元格注册了一个自定义类。自定义类有一些UIStackViews来布置一堆UILabels和UIViews。
- 其中一个排列的子视图应包含可变数量的 UIView。为了使它不那么抽象,让我们将它们视为"座位",将显示参加此活动的用户的面孔(最多可以有四个,也可以没有)
想到的解决方案
(我是新手)
解决方案 1
- 让自定义类布置所有"座位"UIViews,以便我可以将它们视为占位符;
- 让 UICollectionView 的 cellForItemAt 方法遍历数据源并取消隐藏已填充的"席位">
解决方案 2
- 确保自定义类中的 UIStackView 可以从 UICollectionView 的 cellForItemAt 方法引用
- 从cellForItemAt 使用addArrangedSubview添加所有需要的"座位">
解决方案 3
- 注册5个不同的类别(零"座位"到"四个座位")
- 根据数据源的规定取消排队
- 在我看来,这个是最不体面的,但可能是表现损失最小的一个
我完全知道可以有更多更好的解决方案。那么,实现这种可变数量的 UIViews 的最佳方法是什么,为什么?
编辑:
虽然我认为这里的单元格布局无关紧要,但有人要求我发布它 所以它在这里...
我建议解决方案3,因为它的性能会更高。 另外,我有两个建议:
- 避免使用
UIStackView
,因为它的布局性能很慢(它基于AutoLayout
)。此外,尽量避免UITableViewCell
和UICollectionViewCell
中的AutoLayout
以获得更好的性能。以下是一些最流行和最强大的开源布局库PinLayout,LayoutKit。 - 您可以编写基本
UICollectionViewCell
,将所有相关逻辑移动到那里,然后仅使用最少的逻辑覆盖创建所有需要的子类。