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.