iOS - 如何定位具有水平居中的不同大小的未知数量的子视图。

时间:2017-02-01 09:26:40

标签: ios swift autolayout nslayoutconstraint uistackview

我遇到了问题,我确定你们其中一个人可以帮助我。 我正在使用 iOS 开发Swift3 - 应用程序,而我尝试创建的内容是这样的:

Screenshot1
Screenshot2

屏幕截图只显示了我UIViewcontroller的一部分。剩下的空间充满了其他不属于问题的视图。 正如您所看到的,我的子视图(图标)的大小和位置取决于我给出的图标数量(不超过8个)。如果存在超过5个图标,则应创建第二行并减小图标的大小以适合空间。我的观点应始终居中,这意味着它们均匀分布在左右两侧。

到目前为止我尝试了什么:

  • 我创建了一个水平StackView,并尝试以编程方式填充它,但这并没有解决超过5个视图的问题。
  • 尝试使用自动布局约束设置一些视图,但无法解决不同大小和位置的问题。

当然,我可以用代码完成所有事情。一个接一个地创建和放置所有视图,但我想找到一个更清洁的解决方案。

谢谢你的回答。感谢您的反馈。

3 个答案:

答案 0 :(得分:0)

UICollectionView在这里可以是更好的选择。

答案 1 :(得分:0)

它的UIStackView或UICollectionView,因为它们都处理子视图的分发。由于您最多有8个图标,我只需使用UIStackView并垂直堆叠两个水平堆栈视图。您将堆栈视图1和6-8中的项目1-5放在stackview 2中。如果您需要两行具有相同的分布,则需要将水平约束等于imageView宽度的空视图放入,以使第二个堆栈视图具有当数字为奇数时,许多项目为第一项。

答案 2 :(得分:0)

感谢Shuja和Josh带领我朝着正确的方向前进。

我最终使用了UICollectionView并更改了sizeForItemAt中的某些值,以响应更改的单元格大小和insetForSectionAt函数,使我的单元格水平居中。