我有一个非常简单的布局的集合视图:垂直流布局。有一组全宽度单元格。所有这些都使用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上我有一个灾难性的表现。我根本无法滚动。
任何帮助和建议将不胜感激。