小编Man*_*son的帖子

iOS 10中的collectionViewContentSize使用自调整单元格

在iOS 10之前,我有一个自我调整表视图,它只包含一个UICollectionView,其中包含使用标准UICollectionViewFlowLayout的自调整单元格.使用自动布局调整集合视图单元格的大小.为了使表格单元格正确调整大小,我必须找到集合视图的内容大小,并在表格单元格的systemLayoutSizeFittingSize中使用它:withHorizo​​ntalFittingPriority:verticalFittingPriority:.

我还发现对collectionView.collectionViewLayout.collectionViewContentSize的调用使用了estimatedItemSize而不是正确大小的单元格大小,除非我调用了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;
}
Run Code Online (Sandbox Code Playgroud)

对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来违反某些道德规则?在使用自定义单元格时,是否有更好的方法来计算集合视图的内容大小?我宁愿不必从自动布局转移到代码中进行这些大小计算,但这肯定是最糟糕的选择.

objective-c ios uicollectionview ios10

9
推荐指数
2
解决办法
3411
查看次数

标签 统计

ios ×1

ios10 ×1

objective-c ×1

uicollectionview ×1