使用estimatedItemSize的UICollectionView

时间:2015-11-04 10:43:10

标签: ios objective-c autolayout uicollectionview uicollectionviewlayout

我有一个非常简单的布局的集合视图:垂直流布局。有一组全宽度单元格。所有这些都使用NSAutoLayout约束。在reload collectionviewlayout上为每个单元格调用itemSize。如果我们有很多单元格或每个单元格中的布局非常复杂,它会导致性能下降。

我决定使用iOS8中引入的新功能:UICollectionViewFlowLayout的属性estimateitemSize。我还覆盖了preferredLayoutAttributesFittingAttributes方法:

UICollectionViewLayoutAttributes *preferredAttributes = [super preferredLayoutAttributesFittingAttributes: layoutAttributes];

UICollectionViewLayoutAttributes *attributes = [preferredAttributes copy];

CGRect newFrame = attributes.frame;
[self setNeedsLayout];
[self layoutIfNeeded];

CGFloat desiredHeight = [self.contentView systemLayoutSizeFittingSize: UILayoutFittingCompressedSize].height;
newFrame.size.height = desiredHeight;
attributes.frame = newFrame;

return attributes;

问题在于,某些单元格布局仍然使用estimatedItemSize,这就是为什么这些单元格被截断的原因。在iOS8上也有一些细胞错过,我认为他们的位置错误。

UICollectionViewFlowLayout的覆盖方法

- (BOOL) shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{

   return YES;
}

可以解决iOS9的所有问题,但在iOS8上我有一个灾难性的表现。我根本无法滚动。

任何帮助和建议将不胜感激。

0 个答案:

没有答案