在 xib 文件中的 TableViewCell 中显示可变数量图像的最佳方法是什么?
What's the best approach to display a variable number of images within a TableViewCell in a xib file?
我正在构建一个关于会议的应用程序,我想在其中显示每个会议单元格中 VIP 参与者的预览。
这些参与者不可点击也不可滚动,唯一的目的是让他们一目了然。
问题是视图非常动态:
- VIP 出现时带有图像或姓名首字母
- 其余与会者只是一个数字
- 如果 >5 个 VIP,圆圈开始重叠(间距变小)
- 如果9位贵宾,大包圈“所有贵宾出席”
这是它的样子:
我该怎么办?
- Collection查看(似乎 over-kill 因为我对与图像进行任何类型的交互不感兴趣)?
- 堆栈视图?
- 图像(并以编程方式更改约束)?
注意:
这些只是 Table View Cell 的一种,但我们有更多变体,因此我们在 xib 文件中构建自定义单元格。 Xcode 不允许我将 Collection View Cell 添加到 xib 中的 Collection View。
可滚动视图(基于 UIScrollView 的视图如 UICollectionView)的问题是您必须处理滚动,或预先计算内容的宽度,这并不总是那么容易。出于这个原因,如果您不想拥有可滚动的内容,我不会使用 UICollectionView,也不会使用任何基于 UIScrollView 的视图。
然后您可以选择使用 UIStackView。堆栈视图非常适合 "append" 多个视图并以非常简单的方式创建某种 "pile" 视图。但是,如果您不控制需要多少项,就会越过容器视图的边界。
因此,这就是我要做的:
"Fixed container view width" case:如果您的容器视图(您的单元格)具有固定宽度(永远不会改变),我会手动添加我想要的任意数量的 UIImageView在 XIB 本身中支持,然后 hide/unhide 它们取决于我要显示的项目数。
"Variable container view width" case:如果您的容器视图(您的单元格)具有可变宽度(根据屏幕尺寸或任何其他因素而变化),那么您在任何情况下都必须计算(算一算!)您可以在可用宽度内显示的项目数量。然后,您可以选择使用 UIStackView 或手动将视图和约束添加到容器视图。
我说的有道理吗?
谢谢,
有趣的任务 - 我敢肯定有很多方法,但这里有一个使用 UIStackView plus 一些即时计算。
想法是定义视图之间的最大间隙;所有视图的最大宽度;计算出实际所需的间隙,然后让UIStackview处理实际定位。
当然不是您需要的所有功能,但应该让您朝着正确的方向前进。
您可以see/download这里的来源:https://github.com/DonMag/ScratchPad
查看此示例的 Swift3/SpreadingViews 子项目。
我正在构建一个关于会议的应用程序,我想在其中显示每个会议单元格中 VIP 参与者的预览。
这些参与者不可点击也不可滚动,唯一的目的是让他们一目了然。
问题是视图非常动态:
- VIP 出现时带有图像或姓名首字母
- 其余与会者只是一个数字
- 如果 >5 个 VIP,圆圈开始重叠(间距变小)
- 如果9位贵宾,大包圈“所有贵宾出席”
这是它的样子:
我该怎么办?
- Collection查看(似乎 over-kill 因为我对与图像进行任何类型的交互不感兴趣)?
- 堆栈视图?
- 图像(并以编程方式更改约束)?
注意:
这些只是 Table View Cell 的一种,但我们有更多变体,因此我们在 xib 文件中构建自定义单元格。 Xcode 不允许我将 Collection View Cell 添加到 xib 中的 Collection View。
可滚动视图(基于 UIScrollView 的视图如 UICollectionView)的问题是您必须处理滚动,或预先计算内容的宽度,这并不总是那么容易。出于这个原因,如果您不想拥有可滚动的内容,我不会使用 UICollectionView,也不会使用任何基于 UIScrollView 的视图。
然后您可以选择使用 UIStackView。堆栈视图非常适合 "append" 多个视图并以非常简单的方式创建某种 "pile" 视图。但是,如果您不控制需要多少项,就会越过容器视图的边界。
因此,这就是我要做的:
"Fixed container view width" case:如果您的容器视图(您的单元格)具有固定宽度(永远不会改变),我会手动添加我想要的任意数量的 UIImageView在 XIB 本身中支持,然后 hide/unhide 它们取决于我要显示的项目数。
"Variable container view width" case:如果您的容器视图(您的单元格)具有可变宽度(根据屏幕尺寸或任何其他因素而变化),那么您在任何情况下都必须计算(算一算!)您可以在可用宽度内显示的项目数量。然后,您可以选择使用 UIStackView 或手动将视图和约束添加到容器视图。
我说的有道理吗?
谢谢,
有趣的任务 - 我敢肯定有很多方法,但这里有一个使用 UIStackView plus 一些即时计算。
想法是定义视图之间的最大间隙;所有视图的最大宽度;计算出实际所需的间隙,然后让UIStackview处理实际定位。
当然不是您需要的所有功能,但应该让您朝着正确的方向前进。
您可以see/download这里的来源:https://github.com/DonMag/ScratchPad
查看此示例的 Swift3/SpreadingViews 子项目。