12

宣言するさまざまなアイテムサイズのコレクションビューがあります

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

    FeedItem *item = [_imagesLinkArray objectAtIndex:indexPath.row];
    return CGSizeMake(250, 200*item.sizeFactor);
}

アイテム内のセルが再利用されている場合、 でcollectionView:cellForItemAtIndexPath: 指定されたサイズではなく、再利用されたアイテムのサイズでレンダリングされますsizeForItemAtIndexPath:

何か案は?

4

4 に答える 4

5

It seems that collectionView:layout:sizeForItemAtIndexPath: is called once on layout preparation, before CollectionView is rendered.

So whenever you scroll and a cell is dequeued it is resized to the size provided by collectionView:layout:sizeForItemAtIndexPath: at preparation stage. Are you expecting this method to be called whenever a cell with certain indexPath gets visible? So that you can dynamically change cell size? seems this is not how this method can be used, it can be used to determine the size of a cell once at layout preparation stage.

In case you need the sizes to be recomputed for some reason, you can invalidate the layout using [UICollectionViewLayout invalidateLayout].

于 2013-02-06T12:14:20.603 に答える
3

コレクションビューは、アイテムを再計算する頻度が。よりも少ないようUITableViewです。[collectionView reloadData]またはを呼び出すなどして、基になるモデルへのほとんどの変更についてコレクションビューに通知する必要があります[collectionView insertItemsAtIndexPaths:indexPaths]

于 2013-02-04T21:01:16.710 に答える
0

カスタムレイアウトクラスでこの関数をオーバーライドする必要があります。カスタム レイアウトを使用している場合。

override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {
return true
}
于 2016-01-27T13:36:46.407 に答える