UICollectionView:不会对重用项目计算不同大小的项目

Ore*_*oun 12 ios uicollectionview uicollectionviewcell

我有一个集合视图,我声明了不同的项目大小

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

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

当正在重复使用单元格时,正在使用已重新collectionView:cellForItemAtIndexPath: 计划的项目大小而不是指定的项目大小来呈现该单元格sizeForItemAtIndexPath:.

有任何想法吗?

小智 5

collectionView:layout:sizeForItemAtIndexPath:在呈现CollectionView之前,似乎在布局准备时调用一次.

因此,每当您滚动并且单元格出列时,它将调整为collectionView:layout:sizeForItemAtIndexPath:在准备阶段提供的大小.您是否期望只要具有某些indexPath的单元格可见,就会调用此方法?这样你就可以动态改变单元格大小?似乎这不是如何使用这种方法,它可以用于在布局准备阶段确定一次单元格的大小.

如果由于某种原因需要重新计算尺寸,则可以使用布局使布局无效[UICollectionViewLayout invalidateLayout].


Mar*_*ier 3

集合视图似乎比UITableView. 您必须通知集合视图有关底层模型的大部分更改,例如通过调用[collectionView reloadData][collectionView insertItemsAtIndexPaths:indexPaths]