在哪里确定一个dynamic大小的UICollectionViewCell的高度?

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

看来获得单元格高度的最好方法是在UICollectionViewCell的子类中,因为那是我设置布局的位置并且可以访问我的视图的固有尺寸,但是:

collectionView: layout: sizeForItemAtIndexPath:collectionView: cellForItemAtIndexPath: delegate方法之前调用,这意味着我需要知道单元格的高度,然后才能获得单元格的实际布局。

到目前为止,我发现的一切似乎都太复杂了,比如从固定的单元格高度开始,在单元格加载标签之后引用实际高度,然后再次以正确的高度重新加载数据。 有一个更好的方法吗?

很不幸的是,不行。

对于UICollectionView中dynamic大小的项目,您需要知道或计算单元格的大小,然后才能创build。 传统的做法是将每行的数据存储在数组中,然后在collectionView:layout:sizeForItemAtIndexPath:计算该数据的大小。

例如,如果有一个要显示的文本数组,可以将NSString对象存储在数组中,在collectionView:layout:sizeForItemAtIndexPath:测量该string,然后返回大小。 然后, UICollectionView将获取这个大小,并在configuration单元格视图时调用initWithFrame:setFrame:

如果不经常改变,caching这些尺寸也不失为一个好主意。