uicollectionviewflowlayoutautomaticsize uicollectionviewdelegateflowlayout collection automatic ios swift autolayout uicollectionview

ios - automatic - uicollectionviewdelegateflowlayout



Cambiar el tamaño de las imágenes automáticamente en CollectionViewCell en CollectionView con diseño automático (2)

Puede usar sizeForItemAtIndexPath: para cambiar el tamaño de la celda de vista de colección.

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { var numberOfCellInRow : Int = 3 var padding : Int = 5 var collectionCellWidth : CGFloat = (self.view.frame.size.width/CGFloat(numberOfCellInRow)) - CGFloat(padding) return CGSize(width: collectionCellWidth , height: collectionCellWidth) }

Puede obtener el tamaño de la celda a través de:

((UICollectionViewFlowLayout) self.collectionViewName).itemSize.height)

Puedes obtener el tamaño de la imagen a través de:

let sizeOfImage = image.size let height = image.height

Si desea cambiar la altura, cámbiela manualmente por return CGSize(width: collectionCellWidth , height: cellheight)

Tengo una collectionView con UICollectionViewFlowLayout horizontal.

Estoy tratando de lograr:

Si la orientación de un dispositivo es vertical, el ancho de UIImageView será cualitativo para view.width y permitirá que la altura se calcule automáticamente (como suele ocurrir con el diseño automático). Y lo mismo para el modo paisaje. Ejemplo: aplicación de fotos estándar en el Iphone.

Desafortunadamente no veo cómo lograrlo con autoLayout. Establecí restricciones en UIImageView para que sea igual en tamaño a la celda. Pero parece que la venta en sí no se puede anclar a la Vista principal.

Después de leer preguntas similares, parece que las celdas deben redimensionarse mediante programación utilizando

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSize(width: width, height: height) }

Y aquí estoy atascado porque sé el ancho de la pantalla pero no sé cómo calcular la altura de forma dinámica.

Acerca de la altura de la imagen:

Tengo mi imagen declarada así:

var pageImages = [UIImage]() override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell: ImageDetailViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! ImageDetailViewCell let curr = indexPath.row let imgName = data[albumNumber][curr]["image"] cell.DetailImageView.image = UIImage(named: imgName!) return cell }


Si usa la configuración de UIImageView tamaño de UIImageView adecuada (por ejemplo, ajuste / relleno de aspecto), solo necesita establecer la altura de la celda en su collectionView (obtiene un puntero como uno de los parámetros del método ...sizeForItemAtIndexPath... ) altura. También debe llamar al método - layoutIfNeeded en su celda después.