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



我的视图继承结构如下所示:

- View
  - Scroll View
    - Collection View

我正在使用"自动布局"。问题是,当我指定集合视图应该采用超视图的全宽时,它实际上采用了其中包含的元素的全宽。也就是说,如果这个集合视图中有1000个元素,每个元素都有10个像素宽,那么集合视图将是10000个像素。它似乎忽略了我的限制。

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

滚动视图

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

集合视图

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

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

当我指定集合视图应采用在超级视图中,它实际上占据了

滚动视图的全部意义在于,它允许显示比滚动视图本身更大的视图。因此,将集合限制为滚动视图是没有意义的——滚动视图的子视图可以随心所欲。如果你想限制集合视图的大小,只需将其宽度设置为你喜欢的任何宽度即可。

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

自动布局对于滚动视图具有特殊的行为。请阅读技术说明TN2154:UIS滚动视图和自动布局。

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

您需要将集合视图的左边缘固定到顶级视图(滚动视图的超级视图)的左边缘,并类似地固定到右边缘。使用视觉格式无法做到这一点。您需要显式地创建这些约束(或在xib或情节提要中设置它们)。

最新更新