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 に答える