【发布时间】:2017-01-22 17:39:33
【问题描述】:
在 iOS 10 之前,我有一个自调整大小的表格视图,它仅由一个 UICollectionView 和使用标准 UICollectionViewFlowLayout 的自调整单元格组成。集合视图单元格使用自动布局调整大小。为了让表格单元格正确调整大小,我必须找到集合视图的内容大小并在表格单元格的 systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority: 中使用它。
我还发现对 collectionView.collectionViewLayout.collectionViewContentSize 的调用使用了估计的ItemSize 而不是正确大小的单元格大小,除非我调用了 collectionView layoutIfNeeded。这导致 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;
}
现在对 layoutIfNeeded 的调用会导致 *** Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIFlowLayoutSupport.m:823
我在 systemLayoutSizeFittingSize 中调用 layoutIfNeeded 是否违反了某些道德规则?当使用自调整单元格时,是否有更好的方法来计算集合视图的内容大小?我宁愿不必从自动布局转移到在代码中进行这些大小计算,但这肯定是最坏的情况。
【问题讨论】:
标签: ios objective-c uicollectionview ios10