iOS 10之前,我有一个自动调整大小的表视图,它仅由一个使用标准UICollectionViewFlowLayout的具有自适应大小单元格的UICollectionView组成。集合视图单元格使用自动布局进行调整大小。为了使表单元格正确调整大小,我不得不找到集合视图的内容大小,并在表单元格的systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:中使用该大小。
我还发现,如果没有调用collectionView layoutIfNeeded,collectionView.collectionViewLayout.collectionViewContentSize会使用estimatedItemSize而不是正确大小的单元格大小。这导致systemLayoutSizeFittingSize为:
- (CGSize) systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority
{
self.collectionView.frame = CGRectMake(0, 0, targetSize.width, FLT_MAX);
[self.collectionView layoutIfNeeded];
CGSize collectionViewContentSize = self.collectionView.collectionViewLayout.collectionViewContentSize;
CGFloat verticalPadding = fabs(self.collectionViewTopPaddingConstraint.constant) + fabs(self.collectionViewBottomPaddingConstraint.constant);
CGSize cellSize = CGSizeMake(collectionViewContentSize.width, collectionViewContentSize.height + verticalPadding);
return cellSize;
}
在 systemLayoutSizeFittingSize 方法中调用 layoutIfNeeded 导致了一个断言错误:*** Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIFlowLayoutSupport.m:823
我通过调用 layoutIfNeeded 在 systemLayoutSizeFittingSize 中违反了一些伦理规则吗?是否有更好的方法来计算集合视图在使用自定尺寸单元格时的内容大小?我不想从自动布局转移到在代码中进行这些尺寸计算,但这肯定是最坏的选择。
head() -> Desk
。我不想知道你是怎么发现的。 - Stan