Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-如何将大小不同的未知数量的子视图水平居中放置。_Ios_Swift_Autolayout_Nslayoutconstraint_Uistackview - Fatal编程技术网

iOS-如何将大小不同的未知数量的子视图水平居中放置。

iOS-如何将大小不同的未知数量的子视图水平居中放置。,ios,swift,autolayout,nslayoutconstraint,uistackview,Ios,Swift,Autolayout,Nslayoutconstraint,Uistackview,我遇到了一个问题,我相信你们中的一个人可以帮我解决。 我正在用Swift3开发一个iOS应用程序,我试图创建如下内容: 屏幕截图仅显示我的UIViewcontroller的一部分。剩余的空间充满了不属于问题一部分的其他观点。 正如您所看到的,我的子视图(图标)的大小和位置取决于给定的图标数量(不超过8个)。如果存在超过5个图标,则应创建第二行并减小图标的大小以适应空间。我的观点应该始终居中,这意味着它们均匀地分布在左侧和右侧 到目前为止,我尝试的是: 我创建了一个水平StackView,并

我遇到了一个问题,我相信你们中的一个人可以帮我解决。 我正在用Swift3开发一个iOS应用程序,我试图创建如下内容:


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

到目前为止,我尝试的是:

  • 我创建了一个水平
    StackView
    ,并尝试通过编程方式填充它,但对于超过5个视图,这并没有解决问题
  • 尝试使用自动布局约束设置某些视图,但无法解决不同大小和位置的问题
当然,我可以用代码做任何事情。一个接一个地创建和放置所有视图,但我希望找到更干净的解决方案


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

UICollectionView是一个更好的选择

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

感谢Shuja和Josh为我指明了正确的方向


最后,我使用了
UICollectionView
并更改了
SizeForestMat
中的一些值以响应单元格大小的更改,并使用
insetForSectionAt
函数将单元格水平居中。

集合视图可能是更好的选择!!你好,迈克,谢谢你的回答。我已经使用了CollectionView,但只使用了固定大小的单元格。您知道如何在集合视图中水平居中单元格吗?我可以用“sizeForItemAt函数”控制视图大小,对吗?水平居中单元格,这完全取决于集合视图的高度,您需要做的是根据有行数设置集合视图的高度,即假设有5个单元格,然后设置高度120,如果超过设置的两倍,如240,将高度均匀分布在单元之间,这将有所帮助