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);
}
Sie implementieren __shouldInvalidateLayoutForBoundsChange: __ von __YES__ Rückkehr? –
Nein, das habe ich noch nicht umgesetzt. – brodney