¿Cómo ajustar la altura de UICollectionView para que sea el alto del tamaño de contenido de UICollectionView?

Me gustaría que UICollectionView (el rojo) se contraiga a la altura del tamaño de contenido en este caso UICollectionViewCells (los amarillos) porque hay mucho espacio vacío. Lo que intenté es usar:

override func layoutSubviews() { super.layoutSubviews() if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) { self.invalidateIntrinsicContentSize() } } override var intrinsicContentSize: CGSize { return self.collection.contentSize } 

pero return self.collection.contentSize siempre devuelve (ancho, 0) y por esta razón se networkinguce demasiado al valor de altura 30 (el valor que puse en el file xib para la altura, aunque tengo constaint> = 30).

introduzca la descripción de la imagen aquí

Sugiero lo siguiente:

  1. Agregue una restricción de altura a su vista de colección.
  2. Establezca su prioridad en 999.
  3. Establezca su constante a cualquier valor que solo lo haga razonablemente visible en el guión gráfico.
  4. Cambie la restricción igual inferior de la vista de colección a mayor o igual.
  5. Conecte la restricción de altura a una toma de stream.
  6. Cada vez que recargue los datos en la vista de colección, haga lo siguiente:

Muestra de código:

 CGFloat height = myCollectionView.collectionViewLayout.collectionViewContentSize.height heightConstraint.constant = height self.view.setNeedsLayout() Or self.view.layoutIfNeeded() 

Explicación: Extra, no tiene que leer si lo entiende. ¡¡obviamente!!

La interfaz de usuario tratará de reflejar todas las restricciones, sin importar cuáles sean sus prioridades. Dado que la restricción de altura tiene prioridad más baja (999) , y una restricción inferior de tipo mayor o igual. siempre que la constante de restricción de altura se establece en un valor menor que la altura de la vista principal, la vista de la colección será igual a la altura dada, logrando ambas restricciones.

Pero, cuando la constante de restricción de altura se establece en un valor mayor que la altura de la vista principal, ambas restricciones no pueden lograrse. Por lo tanto, solo se logrará la restricción con mayor prioridad, que es la restricción inferior mayor o igual.

Lo siguiente es solo una conjetura de una experiencia. Entonces, logra un constructor. Pero, también trata de hacer que el error en la UI resultante para la otra restricción de menor prioridad no alcanzada sea lo más bajo posible . Por lo tanto, la altura de la vista de colección será igual al tamaño de vista principal.

Tienes que establecer la restricción de altura como igual al tamaño de contenido

 HeightConstraint.constant = collection.contentSize.height 
  1. primero establezca la restricción de altura para uiCollectionView
  2. aquí calendarBaseViewHeight es uiCollectionView height Variable
  3. llamar a la function después de volver a cargar la vista de colección

    func resizeCollectionViewSize () {
    calendarBaseViewHeight.constant = collectionView.contentSize.height
    }

primero calcule el número de celdas que se multiplica con la altura de celda y luego regrese la altura en este método

  collectionView.frame = CGRectMake (x,y,w,collectionView.collectionViewLayout.collectionViewContentSize.height); //objective c //[collectionView reloadData]; collectionView.frame = CGRect(x: 0, y: 0, width: width, height: collectionView.collectionViewLayout.collectionViewContentSize.height) // swift