La altura del tamaño del contenido dynamic de UICollectionView es demasiado larga

Necesito crear una celda UICollectionView con alturas dinámicas según la altura de la vista de image de cada celda. He creado una subclass de UICollectionViewFlowLayout para implementar el comportamiento deseado de la siguiente manera:

#define numColumns 2 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { NSArray* attributesToReturn = [super layoutAttributesForElementsInRect:rect]; for (UICollectionViewLayoutAttributes* attributes in attributesToReturn) { if (attributes.representedElementKind == nil) { NSIndexPath* indexPath = attributes.indexPath; attributes.frame = [self layoutAttributesForItemAtIndexPath:indexPath].frame; } } return attributesToReturn; } - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewLayoutAttributes* currentItemAttributes = [super layoutAttributesForItemAtIndexPath:indexPath]; if (indexPath.item < numColumns) { CGRect frame = currentItemAttributes.frame; frame.origin.y = 5; currentItemAttributes.frame = frame; return currentItemAttributes; } NSIndexPath* indexPathPrev = [NSIndexPath indexPathForItem:indexPath.item-numColumns inSection:indexPath.section]; CGRect framePrev = [self layoutAttributesForItemAtIndexPath:indexPathPrev].frame; CGFloat YPointNew = framePrev.origin.y + framePrev.size.height + 10; CGRect frame = currentItemAttributes.frame; frame.origin.y = YPointNew; currentItemAttributes.frame = frame; return currentItemAttributes; } 

Y en la vista de colección, el controller delega el layout de flujo

  - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { float imageHeight = [[(Product *)self.products[indexPath.row] image] height]; float imageWidth = [[(Product *)self.products[indexPath.row] image] width]; float ratio = 150.0/imageWidth; return CGSizeMake(150, ratio*imageHeight); } 

Implementación celular

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { ProductCell *cell = (ProductCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"ProductCell" forIndexPath:indexPath]; .... [cell.imageView setImageWithURL:[NSURL URLWithString:[[(Product *)self.products[indexPath.row] image] url]]]; return cell; } 

Todas las celdas aparecieron como se esperaba, pero la vista de contenido era demasiado larga como se muestra.

Dynamic UICollectionView height

Creo que tengo que implementar el método – (CGSize) collectionViewContentSize para get el contentSize correcto, pero no sé cómo calcular el alto real de la vista de colección