2013-04-09 5 views
6

aufgerufen Dieses seltsame Verhalten beim Implementieren einer benutzerdefinierten UICollectionViewLayout-Unterklasse gefunden. Ich habe die Methoden der Unterklasse außer collectionViewContentSize eingerichtet. Alle Zellen zeigten sich dort, wo ich es erwartet hatte, aber die contentView war zu lang. Sah doppelt so aus, wie es sein sollte.UICollectionViewLayout prepareLayout wird für beliebiges Scrollen

Ich habe die folgende Methode implementiert, um die richtige contentSize zu erhalten. Obwohl es jetzt der erwartete Wert ist, wird prepareLayout jedes Mal aufgerufen, wenn die Ansicht ein Pixel scrollt. Das heißt, wenn ich von 0,0 bis 0,500 wische, wird prepareLayout 500 Mal aufgerufen!

Was könnte das an meinem verursachen?

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

Sie implementieren __shouldInvalidateLayoutForBoundsChange: __ von __YES__ Rückkehr? –

+0

Nein, das habe ich noch nicht umgesetzt. – brodney

Antwort