4

当我打电话

[collectionView cellForItemAtIndexPath:indexPath:]

从内部

[collectionView:layout:sizeForItemAtIndexPath:]

那么委托方法不会被触发。知道为什么不?

你可以在这里看到它。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    CustomCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];

    [cell configureWithData:self.data[indexPath.row]];

    return cell;
}


- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    CustomCell * cell = (CustomCell *)[collectionView cellForItemAtIndexPath:indexPath];

    return [cell preferredSize];
}

我想要做的是询问单元格的首选大小。

我可以做

CustomCell * cell = (CustomCell *)[self collectionView:collectionView cellForItemAtIndexPath:indexPath];

但随后触发了一个永无止境的循环循环

为什么它的委托方法没有按应有的方式调用?

4

1 回答 1

7

我最终得到了一个类方法而不是实例方法:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    return [CustomCell preferredSizeWithData:self.data[indexPath.row]; 

}

我为单元格创建了一个 Class 方法......对于这个方法,我提供了指定的实际实例indexPath将持有的数据并计算首选大小

我觉得

CustomCell * cell = (CustomCell *)[collectionView cellForItemAtIndexPath:indexPath];

内部触发

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 

我们看到的是Apple的一些机制来防止循环循环......因为直接调用

CustomCell * cell = (CustomCell *)[self collectionView:collectionView cellForItemAtIndexPath:indexPath];

导致循环循环。

于 2013-01-18T10:38:41.067 回答