首页 > 解决方案 > 具有自动布局单元格的 UICollectionView 高度

问题描述

我有一个UICollectionView(使用流布局),其中单元格使用自动布局。为了实现这一点,我将estimatedItemSize 设置为非零值

要触发cellForRowAt,我需要为集合视图设置一个非零高度。这可以是显式的高度约束,也可以是从父视图继承的高度。

然而,这似乎会导致这样一种情况,即如果通过自动布局计算的动态单元格高度大于集合视图的高度,则会出现错误;

“...项目高度必须小于 UICollectionView 的高度...”

可以理解地发生。对此的首选解决方案是什么?这似乎是一个 catch 22,我必须为要调用的cellForRowAt设置某个值的高度,但这个值可能会导致上述错误。

我正在尝试的所需行为是集合视图高度以匹配单元格的动态高度(这是一个水平滚动的集合视图,其中每个单元格都是“全屏”)。

更新:

为了进一步澄清,请遵循以下步骤;

在视图加载时,将集合视图高度设置为最小值,例如 200。此处需要一个非零值来触发数据加载。

加载 cellForRowAt 将启动单元创建的集合视图数据。单元格将使用自动布局调整大小。

如果大小的单元格高度 < 200,则一切正常。

如果大小的单元格高度 > 200,则会按预期记录流布局错误。

为了解决这个问题,单元格需要在 layoutSubviews 中通知它的高度。如果集合视图高度更大,则将其调整为新高度。

最终效果是我有一个最小高度(200)的扩展集合视图,并增长到最大单元格的最大高度。

标签: iosswiftuicollectionview

解决方案


推荐阅读