collectionViewContentSize in iOS 10 mit Zellen, deren Größe sich selbst ändert

or iOS 10 hatte ich eine Tabellenansicht mit eigener Größe, die ausschließlich aus einer UICollectionView mit Zellen mit eigener Größe und einem Standard-UICollectionViewFlowLayout bestand. Die Größe der Zellen der Sammlungsansicht wird mithilfe des automatischen Layouts festgelegt. Damit die Größe der Tabellenzelle korrekt ist, musste ich die Inhaltsgröße der Sammlungsansicht ermitteln und diese im systemLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority:. @ Der Tabellenzelle verwende

Ich habe auch festgestellt, dass der Aufruf von collectionView.collectionViewLayout.collectionViewContentSize die EstimatedItemSize anstelle der Zellengrößen mit der richtigen Größe verwendet hat, es sei denn, ich habe collectionView layoutIfNeeded aufgerufen. Dies führte zu einem systemLayoutSizeFittingSize von:

- (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;
}

Der Aufruf von layoutIfNeeded verursacht jetzt ein*** Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIFlowLayoutSupport.m:823

Verstoße ich gegen eine ethische Regel, indem ich layoutIfNeeded in systemLayoutSizeFittingSize aufrufe? Gibt es eine bessere Methode zum Berechnen der Inhaltsgröße einer Sammlungsansicht, wenn Zellen mit eigener Größe verwendet werden? Ich würde lieber nicht vom automatischen Layout zum Ausführen dieser Größenberechnungen im Code übergehen müssen, aber das ist mit Sicherheit eine Option für den schlimmsten Fall.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage