具有动态高度的水平 CollectionView 导致 FlowLayout 警告

Posted

技术标签:

【中文标题】具有动态高度的水平 CollectionView 导致 FlowLayout 警告【英文标题】:Horizontal CollectionView with dynamic height cause FlowLayout warning 【发布时间】:2018-02-19 10:31:34 【问题描述】:

我有一个包含两个图像的横向滚动集合视图。用户可以在运行时更改这些图像。这种变化可能会导致集合视图单元格大小的变化,因此集合视图也需要根据单元格的高度来调整其高度。

我已经实现了 UICollectionViewDelegateFlowLayout 协议和 sizeForItemAt 函数,它返回给定图像的正确单元格大小。

我还有一个高度约束出口连接到我的收藏视图,它允许我更改其高度,以匹配所选图像的高度值。

当绘制到屏幕上时,一切都按照您的预期呈现,但我收到错误“未定义 UICollectionViewFlowLayout 的行为,因为..”,抱怨 sizeForItemAt 返回的高度超过了我的集合视图默认高度(在情节提要中设置)。

一旦我改变了它的高度约束,我似乎需要使我的集合视图布局无效,以便在 sizeForItemAt 返回单元格大小之前用这个新值更新集合视图布局。

我尝试在更新集合视图高度约束后立即调用 UICollectionViewLayouts invalidateLayout(),但这没有帮助。

对我做错了什么有什么想法吗?

【问题讨论】:

【参考方案1】:

已解决

好的,我需要做的是为我的视图控制器调用 view.layoutIfNeeded() 在我更改集合视图高度约束后立即保存集合视图。然后集合视图的边界将使用新的高度值更新,以便单元格适合。

【讨论】:

你能分享一个演示吗?我无法使它工作。谢谢。

以上是关于具有动态高度的水平 CollectionView 导致 FlowLayout 警告的主要内容,如果未能解决你的问题,请参考以下文章

如何根据其中的内容创建具有动态高度的集合视图?

计算 NSString 高度以在 collectionView 单元格中使用

具有动态高度的集合视图水平方向

如何在水平collectionview中设置不同的单元格高度和宽度

具有动态宽度和高度的垂直和水平中心块

如何根据标签大小调整 CollectionView 高度