什么是在xib文件中在TableViewCell中显示可变数量图像的最佳方法?

时间:2017-03-20 15:45:52

标签: ios swift uitableview uicollectionviewcell uistackview

我正在构建一个关于会议的应用程序,我希望在每个会议单元中显示VIP参与者的预览。

这些参与者不是可点击的,也不是可滚动的,这是他们快速看到它们的唯一目的。

问题是视图非常动态:

  • VIP会显示图片或缩写
  • 其他与会者只是一个数字
  • if> 5 VIP' s,圆圈开始重叠(间距变小)
  • 如果有9名贵宾,大包装圈“所有出席的贵宾和#34;

它的外观如下: enter image description here

我该怎么办?

  • CollectionView(因为我对与图像的任何交互都不感兴趣,所以看起来过度杀戮)?
  • StackView?
  • 图像(并以编程方式更改约束)?

注意:

这只是一种Table View Cell,但我们有很多变化,所以我们在xib文件中构建自定义单元格。 Xcode不允许我在xib中的Collection View中添加Collection View Cell。

enter image description here

2 个答案:

答案 0 :(得分:6)

有趣的任务 - 我确信有很多方法,但这里有一个使用UIStackView 加上一些即时计算。

这个想法是定义视图之间的最大差距;所有视图的最大宽度;计算所需的实际间隙,然后让UIStackview处理实际定位。

enter image description here

当然不是你需要的所有功能,但应该让你朝着正确的方向前进。

您可以在此处查看/下载此源代码:https://github.com/DonMag/ScratchPad

查看此示例的Swift3 / SpreadingViews子项目。

答案 1 :(得分:1)

可滚动视图(基于UIScrollView的视图为UICollectionView)的问题在于,您必须处理滚动或预先计算内容的宽度,这并不总是很容易。因此,如果您不想使用可滚动内容,我不会使用UICollectionView,也不会使用任何基于UIScrollView的视图。

然后您可以选择使用UIStackView。堆栈视图非常适合"追加"多个视图并创建某种"桩"以非常简单的方式看待观点。但是,如果您无法控制所需的项目数量,则会超越容器视图的边界。

因此,这就是我要做的事情:

"固定容器视图宽度" case :如果你的容器视图(你的单元格)有一个固定的宽度(永远不会改变),我手动添加我希望在XIB本身支持的UIImageViews,然后隐藏/取消隐藏它们取决于它们关于我想要显示的项目数量。

"可变容器视图宽度" case :如果您的容器视图(您的单元格)具有可变宽度(根据屏幕大小或其他因素而变化),那么您将不得不在任何情况下计算(算一算!)的数量您可以在可用宽度范围内显示的项目。然后,您可以选择使用UIStackView还是添加您的视图&手动限制到容器视图。

我说的有意义吗?

谢谢,

相关问题