在实现自定义UICollectionViewLayout
子类时发现了这种奇怪的行为。我设置了除collectionViewContentSize
. 所有的细胞都出现在我预期的地方,但是contentView
太长了。看起来大约是应该的两倍。
我实现了下面的方法来获得正确的contentSize
. 虽然,它现在是预期值,prepareLayout
每次视图滚动一个像素时都会调用它。这意味着如果我从 0,0 滑动到 0,500,prepareLayout
就会被调用 500 次!
我有什么collectionViewContentSize
可能导致这种情况?
- (CGSize)collectionViewContentSize {
UICollectionViewLayoutAttributes *leftAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:0]-1 inSection:0]];
UICollectionViewLayoutAttributes *rightAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:1]-1 inSection:1]];
float leftHeight = leftAttributes.frame.size.height + leftAttributes.frame.origin.y;
float rightHeight = rightAttributes.frame.size.height + rightAttributes.frame.origin.y;
float maxHeight = leftHeight > rightHeight ? leftHeight : rightHeight;
return CGSizeMake(self.collectionView.bounds.size.width, maxHeight);
}