我有不同的商品尺寸的集合图,我在申报
- (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:
有任何想法吗?
似乎collectionView:layout:sizeForItemAtIndexPath:
上布局准备的CollectionView之前被渲染调用一次。
所以每当你滚动和小区出列将被重新调整到所提供的尺寸collectionView:layout:sizeForItemAtIndexPath:
在准备阶段。 你认为此方法时具有一定indexPath细胞变得可见被称为? 所以,你可以动态改变细胞的大小? 看来这是不怎样用这种方法可以被使用,它可以用来在布局准备阶段一旦确定细胞的尺寸。
如果您需要重新计算由于某种原因,大小,您可以使用布局失效[UICollectionViewLayout invalidateLayout]
集合观点似乎较少重新计算的项目比UITableView
。 你必须告知大部分的改变底层模型,例如,通过调用集合视图[collectionView reloadData]
或[collectionView insertItemsAtIndexPaths:indexPaths]
你需要重写 自定义布局类此功能。 如果您使用自定义布局。
override func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {
return true
}
你可以简单的重载滚动视图代表
func scrollViewDidScroll(_ scrollView: UIScrollView) {
collectionView.collectionViewLayout.invalidateLayout()
}