Trovato questo strano comportamento durante l'implementazione di una sottoclasse personalizzata UICollectionViewLayout
. Ho impostato i metodi della sottoclasse eccetto per collectionViewContentSize
. Tutte le celle si sono mostrate dove mi aspettavo, ma il contentView
era troppo lungo. Sembrava essere il doppio di quello che dovrebbe essere.UICollectionViewLayout prepareLayout viene chiamato per qualsiasi scorrimento
Ho implementato il metodo seguente per ottenere il valore corretto contentSize
. Tuttavia, è ora il valore previsto, prepareLayout
viene chiamato ogni volta che la vista scorre un pixel. Ciò significa che se si scorre da 0,0 a 0,500, prepareLayout
viene chiamato 500 volte!
Che cos'è il mio collectionViewContentSize
che potrebbe causare quello?
- (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);
}
Stai attuazione: __ da __YES__ ritorno? –
No, non l'ho ancora implementato. – brodney