ios - 具有自动布局单元格的 UICollectionView 高度
问题描述
我有一个UICollectionView(使用流布局),其中单元格使用自动布局。为了实现这一点,我将estimatedItemSize 设置为非零值。
要触发cellForRowAt,我需要为集合视图设置一个非零高度。这可以是显式的高度约束,也可以是从父视图继承的高度。
然而,这似乎会导致这样一种情况,即如果通过自动布局计算的动态单元格高度大于集合视图的高度,则会出现错误;
“...项目高度必须小于 UICollectionView 的高度...”
可以理解地发生。对此的首选解决方案是什么?这似乎是一个 catch 22,我必须为要调用的cellForRowAt设置某个值的高度,但这个值可能会导致上述错误。
我正在尝试的所需行为是集合视图高度以匹配单元格的动态高度(这是一个水平滚动的集合视图,其中每个单元格都是“全屏”)。
更新:
为了进一步澄清,请遵循以下步骤;
在视图加载时,将集合视图高度设置为最小值,例如 200。此处需要一个非零值来触发数据加载。
加载 cellForRowAt 将启动单元创建的集合视图数据。单元格将使用自动布局调整大小。
如果大小的单元格高度 < 200,则一切正常。
如果大小的单元格高度 > 200,则会按预期记录流布局错误。
为了解决这个问题,单元格需要在 layoutSubviews 中通知它的高度。如果集合视图高度更大,则将其调整为新高度。
最终效果是我有一个最小高度(200)的扩展集合视图,并增长到最大单元格的最大高度。
解决方案
推荐阅读
- java - 使用 JProfiler 分析 Java mongodb 查询,“检索数据”和“查询”有什么区别
- javascript - 为什么只选择一个元素时,我的 if 语句返回大于 1?
- ios13 - CoreNFC-IOS13:连接iso15693标签后,iso15693Tag.isAvailable总是返回false
- android - 已创建时未找到通知通道
- syntax - 在 Codesys 的数组中制作子数组?
- swift - 当单击文本字段进行编辑时,UIScrollView 中的 UITextField 会冻结应用程序
- c# - Visual Studio Pro s2017 中的包管理器控制台 Enable-Migrations CommandNotFoundException
- flyway - 是否可以通过命令行使用 Flyway 在日志中显示插入/更新次数的结果?
- google-apps-script - 将所有根文件夹文件移动到文件夹中而不创建副本
- angular - 角度条件验证