在我的uicollectionview委托中,我有这段代码。基本上,它是根据colectionview大小设置单元格的大小。
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGFloat ratio = 200.0/280.0; // w/h
CGFloat cellWidth = (collectionView.frame.size.width-50)/4.0;
CGFloat cellHeight = cellWidth / ratio;
CGSize cellSize = CGSizeMake(cellWidth, cellHeight);
return cellSize;
}
如何在不重新加载collectionView的情况下更改collectionView框架后强制此委托运行?我想到的一种方法是通过循环遍历所有可见单元来手动调用此函数,但对于这么简单的事情来说似乎太沉重了。
HELLLPPPPPP
答案 0 :(得分:0)
您可以像这样手动调用此委托:
CGSize size = [self collectionView:self.collectionView
layout:self
sizeForItemAtIndexPath:indexPath];
答案 1 :(得分:0)
好的,我自己找到了解决方案。为了在调整collectionview之后强制此委托再次运行,我们只需要重新加载SINGLE单元格。例如,第一个单元格。然后collectionview将自动调整所有单元格的大小。
NSIndexPath *firstItem = [NSIndexPath indexPathForRow:0 inSection:0];
[_cardCollectionView performBatchUpdates:^{
[_cardCollectionView reloadItemsAtIndexPaths:@[firstItem]];
} completion:^(BOOL finished) {}];
无论如何,感谢所有人试图帮助我。