如何在不离开屏幕的情况下让UICollectionView用自动布局填充其包含滚动视图的宽度?

时间:2013-07-05 20:00:43

标签: ios uiscrollview uicollectionview autolayout

我认为heirarchy看起来像这样:

- View
  - Scroll View
    - Collection View

我正在使用自动布局。问题是,当我指定集合视图应该采用超视图的整个宽度时,它最终会实际获取其中包含的元素的整个宽度。即,如果此集合视图中有1000个元素,并且每个元素的宽度为10像素,则集合视图将为10000像素。它似乎忽略了我的约束。

我使用的VFL看起来有点像这样:

滚动视图

H:|[scroll]|
V:|[scroll]|

收藏视图

H:|[collection]|
V:|[collection]|

所有视图都设置为不将自动调整遮罩转换为约束。

2 个答案:

答案 0 :(得分:1)

  

当我指定集合视图应该采用的全宽度时   超级视图,它最终实际上占据了整个宽度   其中包含的元素。

滚动视图的重点是它允许显示大于滚动视图本身的视图。因此将集合约束到滚动视图是没有意义的 - 滚动视图的子视图可以像他们想要的那样大。如果要限制集合视图的大小,只需将其宽度设置为您喜欢的宽度。

答案 1 :(得分:0)

帖子中的约束使集合视图沿两个轴填充滚动视图。不清楚你为什么要这样做。我假设你真的想要像App Store这样的东西,它在垂直滚动的滚动视图中有多个水平滚动的集合。

自动布局对滚动视图有特殊行为。阅读Technical Note TN2154: UIScrollView And Autolayout

因此,滚动视图的边缘和滚动视图的后代之间的约束会影响滚动视图的内容大小。滚动视图的边缘与滚动视图外部的视图之间的约束会影响滚动视图的框架。

您需要将集合视图的左边缘固定到顶级视图的左边缘(滚动视图的超级视图),并且类似地将右边缘固定。您无法使用可视格式执行此操作。您需要明确创建这些约束(或在xib或storyboard中设置它们)。