Znalazło to dziwne zachowanie podczas implementowania niestandardowej podklasy UICollectionViewLayout
. Skonfigurowałem metody podklas za wyjątkiem collectionViewContentSize
. Wszystkie komórki pojawiły się tam, gdzie się spodziewałem, ale contentView
było za długie. Wyglądało na to, że jest podwójnie, jak powinno być.UICollectionViewLayout prepareLayout jest wywoływane dla każdego przewijania
Zaimplementowałem poniższą metodę, aby uzyskać poprawną contentSize
. Chociaż teraz jest to wartość oczekiwana, prepareLayout
jest wywoływana za każdym razem, gdy widok przewija jeden piksel. Oznacza to, że jeśli przeciągnę od 0,0 do 0,500, prepareLayout
nazywa się 500 razy!
Co takiego może być przyczyną mojego collectionViewContentSize
?
- (CGSize)collectionViewContentSize {
UICollectionViewLayoutAttributes *leftAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:0]-1 inSection:0]];
UICollectionViewLayoutAttributes *rightAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:1]-1 inSection:1]];
float leftHeight = leftAttributes.frame.size.height + leftAttributes.frame.origin.y;
float rightHeight = rightAttributes.frame.size.height + rightAttributes.frame.origin.y;
float maxHeight = leftHeight > rightHeight ? leftHeight : rightHeight;
return CGSizeMake(self.collectionView.bounds.size.width, maxHeight);
}
Czy wdrożenie __shouldInvalidateLayoutForBoundsChange: __ przez __YES__ powrocie? –
Nie, jeszcze tego nie wdrożyłem. – brodney