在哪里确定动态大小的UICollectionViewCell的高度?

时间:2013-09-13 15:36:04

标签: ios objective-c uicollectionview uicollectionviewcell

我正在使用UICollectionViewFlowLayout。我的单元格包含高度不同的UILabel(行数)。

似乎获得单元格高度的最佳方法是在UICollectionViewCell的子类中,因为这是我设置布局并可以访问我的视图的内在大小的地方,但是:

collectionView: layout: sizeForItemAtIndexPath:委托方法之前调用

collectionView: cellForItemAtIndexPath:,这意味着在获得单元格的实际布局之前,我需要知道单元格高度。

到目前为止,我提出的所有内容似乎都过于复杂,例如从固定单元格高度开始,在单元格加载中的标签之后引用实际高度,并以正确的高度再次重新加载数据。有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

不幸的是,没有。

对于UICollectionView中动态调整大小的项目,您需要在创建单元格之前知道或计算单元格的大小。执行此操作的传统方法是将数据存储在数组中的每一行,然后在collectionView:layout:sizeForItemAtIndexPath:中计算该数据的大小。

例如,如果要显示一个文本数组,则可以将NSString个对象存储在数组中,在collectionView:layout:sizeForItemAtIndexPath:中测量该字符串并返回大小。 UICollectionView然后采用该大小,并在配置您的单元格视图时调用initWithFrame:setFrame:

如果它们不经常更改,那么缓存这些尺寸也不是一个坏主意。