我正在使用UICollectionViewFlowLayout。我的单元格包含高度不同的UILabel(行数)。
似乎获得单元格高度的最佳方法是在UICollectionViewCell
的子类中,因为这是我设置布局并可以访问我的视图的内在大小的地方,但是:
collectionView: layout: sizeForItemAtIndexPath:
委托方法之前调用 collectionView: cellForItemAtIndexPath:
,这意味着在获得单元格的实际布局之前,我需要知道单元格高度。
到目前为止,我提出的所有内容似乎都过于复杂,例如从固定单元格高度开始,在单元格加载中的标签之后引用实际高度,并以正确的高度再次重新加载数据。有更好的方法吗?
答案 0 :(得分:3)
不幸的是,没有。
对于UICollectionView中动态调整大小的项目,您需要在创建单元格之前知道或计算单元格的大小。执行此操作的传统方法是将数据存储在数组中的每一行,然后在collectionView:layout:sizeForItemAtIndexPath:
中计算该数据的大小。
例如,如果要显示一个文本数组,则可以将NSString
个对象存储在数组中,在collectionView:layout:sizeForItemAtIndexPath:
中测量该字符串并返回大小。 UICollectionView
然后采用该大小,并在配置您的单元格视图时调用initWithFrame:
或setFrame:
。
如果它们不经常更改,那么缓存这些尺寸也不是一个坏主意。