UICollectionView:不同大小的物品不计算在重复使用的物品(UICollectionVi

2019-08-02 13:50发布

我有不同的商品尺寸的集合图,我在申报

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

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

当电池在被重复使用collectionView:cellForItemAtIndexPath:该项目正在呈现与reuesed项的大小和未指定的一个sizeForItemAtIndexPath:

有任何想法吗?

Answer 1:

似乎collectionView:layout:sizeForItemAtIndexPath:上布局准备的CollectionView之前被渲染调用一次。

所以每当你滚动和小区出列将被重新调整到所提供的尺寸collectionView:layout:sizeForItemAtIndexPath:在准备阶段。 你认为此方法时具有一定indexPath细胞变得可见被称为? 所以,你可以动态改变细胞的大小? 看来这是不怎样用这种方法可以被使用,它可以用来在布局准备阶段一旦确定细胞的尺寸。

如果您需要重新计算由于某种原因,大小,您可以使用布局失效[UICollectionViewLayout invalidateLayout]



Answer 2:

集合观点似乎较少重新计算的项目比UITableView 。 你必须告知大部分的改变底层模型,例如,通过调用集合视图[collectionView reloadData][collectionView insertItemsAtIndexPaths:indexPaths]



Answer 3:

你需要重写 自定义布局类此功能 如果您使用自定义布局。

override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {
return true
}


Answer 4:

你可以简单的重载滚动视图代表

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    collectionView.collectionViewLayout.invalidateLayout()
}


文章来源: UICollectionView: different size items is not calculated on reused items