UICollectionView:sizeForItemAtIndexPath中的UICollectionViewCell对象始终为空

7
我有一个包含不同自定义单元格的集合视图。
这些单元格包含不同大小的内容。
这些单元格在Storyboard中定义,因此不需要在代码中注册。
现在我想要做的就是根据内容在委托方法中更改大小:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

id cellAtIndexPath = [collectionView cellForItemAtIndexPath:indexPath];

NSLog(@"The cell: %@", cellAtIndexPath);

...
e.g. calling sizeToFit methods and cumulating the sizes of the cells' subviews
...

}

每个单元格都按预期调用了该方法,但是无论我尝试什么,cellAtIndexPath始终返回NULL。因此,我无法访问indexPath处的单元格对象或其内容视图。
您有什么建议为什么我无法访问单元格对象?
1个回答

11

collectionView:layout:sizeForItemAtIndexPath 方法由集合视图的流布局对象调用。在单元格被添加到集合视图之前,布局会请求单元格的大小。您需要自行计算所需的单元格大小并返回。


2
谢谢!所以,从这个角度来看,无法根据子视图设置不同的单元格高度(通常调用sizeToFit进行计算)?没有可能根据它们的内容“调整大小”单元格吗?例如,对于UILabel,您将不得不通过行和文本长度计算高度。而且那会非常不准确。 - crud21
好的。如果单元格大小取决于其内容,您可以找到计算单元格大小的方法,但不能依赖于单元格视图。(例如,NSString提供了获取文本尺寸的方法。) - chris
4
这很愚蠢和不幸...如果你请求一个还不存在的单元格,UITableView会去数据源获取它,对吗? - jtbandes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接