2013-04-09 13 views
6

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); 
} 
+0

Czy wdrożenie __shouldInvalidateLayoutForBoundsChange: __ przez __YES__ powrocie? –

+0

Nie, jeszcze tego nie wdrożyłem. – brodney

Odpowiedz

Powiązane problemy