Cambia la altura de UICollectionViewCell para que se ajuste a UILabel

Estoy tratando de que el tamaño de la altura de mi celda se ajuste a la label. El asunto es que el text de la label se establece en el cellForItemAtIndexPath , y si he comprendido correctamente, sizeForItemAtIndexPath ejecuta antes del cellForItemAtIndexPath . Esto es algo que he intentado hasta ahora:

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let imageCell = collectionView.dequeueReusableCellWithReuseIdentifier("imageCell", forIndexPath: indexPath) as? CollectionViewCell imageCell!.imageText.text = post.text // This set the UICollectionView Cell text imageCell!.frame.size.height = (imageCell!.frame.size.height) + (imageCell!.imageText.frame.size.height) return imageCell! } 

No estoy usando el layout automático.

introduzca la descripción de la imagen aquí

¿Alguna sugerencia de por qué la altura de la celda no cambia según la label?

Esto solía ser un problema molesto para resolver, pero es mucho más fácil si puede usar el layout automático. Mira esta respuesta para un tutorial completo.

Incluso si el sizeForItemAtIndexPath ejecuta primero, ese es el lugar para establecer el tamaño de la celda. cellForItemAtIndexPath no puede cambiar el tamaño.

En sizeForItemAtIndexPath , debe averiguar el tamaño de la image para cada celda y, luego, devolver ese tamaño.

Algo como esto:

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let imageCell = collectionView.cellForItemAtIndexPath(indexPath) as! CollectionViewCell let size = CGSize(width: imageCell.frame.width, height: imageCell.frame.size.height + imageCell.imageText.frame.size.height) return size }