Przed iOS 10 miałem samokodujący widok tabeli, który składał się wyłącznie z UICollectionView z samokwającymi się komórkami przy użyciu standardowego UICollectionViewFlowLayout. Komórki widoku kolekcji są sortowane za pomocą automatycznego układu. Aby komórka tabeli poprawiła się poprawnie, musiałem znaleźć rozmiar zawartości widoku kolekcji i użyć go w systemie tableLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority :.collectionViewContentSize w iOS 10 przy użyciu komórek samokonujących
Stwierdziłem również, że wywołanie metody collectionView.collectionViewLayout.collectionViewContentSize użyło parametru szacunkowej wielkości wymiaru zamiast rozmiarów komórek o prawidłowym rozmiarze, chyba że wywołałem collectionView layoutIfNeeded. Spowodowało to systemLayoutSizeFittingSize z:
- (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;
}
Wezwanie do layoutIfNeeded teraz powoduje *** Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIFlowLayoutSupport.m:823
jestem naruszono pewne reguły etyczne dzwoniąc layoutIfNeeded ciągu systemLayoutSizeFittingSize? Czy istnieje lepsza metoda obliczania rozmiaru zawartości widoku kolekcji przy korzystaniu z samokierowania komórek? Raczej nie będę musiał przechodzić z układu automatycznego do wykonywania obliczeń wielkości w kodzie, ale z pewnością jest to opcja najgorszego przypadku.
Bez ustawienia ramki o odpowiedniej szerokości, rozmiar układu jest błędnie obliczony. Nie ulega awarii, ale rozmiar jest całkowicie błędny. Skończyło się na zastąpieniu widoków kolekcji niestandardową podklasą UIView siatki, ponieważ obliczenia układu były względnie proste, a samokwazyjne widoki kolekcji znajdowały się gdzieś pomiędzy delikatnymi i nieużytecznymi. – ManicJason
Czy próbowałeś wywołać '[self.collectionView.superView layoutIfNeeded];' – tuantm
Powoduje to inny błąd asercji w widoku kolekcji. – ManicJason