Tengo un UICollectionViewcon un UICollectionViewFlowLayout, y quiero calcular el tamaño de su contenido (para devolverlo enintrinsicContentSize necesario ajustar su altura a través de AutoLayout).
El problema es: incluso si tengo una altura fija e igual para todas las celdas, no sé cuántas "filas" / líneas tengo en el UICollectionView. Tampoco puedo determinar ese recuento por la cantidad de elementos en mi fuente de datos, ya que las celdas que representan los elementos de datos varían en ancho, por lo que también lo hace la cantidad de elementos que tengo en una línea de UICollectionView.
Dado que no pude encontrar ninguna pista sobre este tema en la documentación oficial y buscar en Google no me trajo más, cualquier ayuda e idea sería muy apreciada.
fuente

En caso de que esté utilizando el diseño automático , puede crear una subclase de
UICollectionViewSi usa el siguiente código, entonces no tiene que especificar ninguna restricción de altura para la vista de colección, ya que variaría según el contenido de la vista de colección.
A continuación se muestra la implementación:
fuente
En
viewDidAppearpuedes conseguirlo por:Tal vez cuando recargue los datos, luego necesite calcular una nueva altura con nuevos datos, entonces puede obtenerlo: agregue un observador para escuchar cuando haya
CollectionViewterminado de recargar los datos enviewdidload:Luego agregue la función de abajo para obtener una nueva altura o hacer cualquier cosa después de que la vista de colección haya terminado de recargar:
Y no olvide eliminar el observador:
fuente
user1046037 responder en Swift ...
fuente
UILabelanterior, el contenido decollectionViewpasar por encima de otro elemento anterior, ¿tiene otra solución?Código Swift 3 para la respuesta del usuario 1046037
fuente
Rápido 4
fuente
Rápido 4.2
fuente
Es demasiado tarde para responder a esta pregunta, pero recientemente pasé por este problema.
La respuesta anterior de @ lee me ayudó mucho a obtener mi respuesta. Pero esa respuesta se limita a objetivo-c y estaba trabajando en rápido .
@lee Con referencia a su respuesta, permítame permitir que el usuario rápido resuelva este problema fácilmente. Para eso, siga los pasos a continuación:
Declare una
CGFloatvariable en la sección de declaración:En
viewDidAppearpuedes conseguirlo por:Tal vez cuando sus
reloaddatos necesiten calcular una nueva altura con nuevos datos, entonces puede obtenerlos:addObserverpara escuchar cuando hayaCollectionViewterminado de recargar los datos enviewWillAppear:Luego agregue la función de abajo para obtener una nueva altura o haga cualquier cosa después de
collectionviewterminar la recarga:Y no olvide eliminar el observador:
Espero que esto le ayude a resolver su problema rápidamente.
fuente
Esta respuesta se basa en @Er. La respuesta de Vihar. Puede implementar fácilmente la solución utilizando RxSwift
fuente
Versión rápida de @ user1046037:
fuente
Swift 4.2, Xcode 10.1, iOS 12.1:
Por alguna razón,
collectionView.contentSize.heightaparecía más pequeño que la altura resuelta de mi vista de colección. Primero, estaba usando una restricción de diseño automático relativa a la mitad de la altura de la supervista. Para solucionar esto, cambié la restricción para que sea relativa al "área segura" de la vista.Esto me permitió establecer la altura de la celda para llenar la vista de mi colección usando
collectionView.contentSize.height:antes de
Después
fuente
asumiendo que su collectionView se denomina collectionView , puede tomar la altura de la siguiente manera.
fuente
Además, será mejor que llames
reloadDataantes de obtener la altura:fuente