source how example data collection cellforitematindexpath ios objective-c swift uicollectionview uicollectionviewcell

ios - how - UICollectionViewCell contenido de tamaño incorrecto en la primera carga



uicollectionview header swift (2)

Parece que todavía conserva su tamaño básico de 100x100px para contentView mientras que la celda misma ya tiene el tamaño correcto. Puede forzar que el diseño se restablezca agregando la siguiente línea justo antes de devolver la celda:

cell?.layoutIfNeeded()

He agregado un UICollectionView a mi UIViewController y he creado una celda personalizada para él.

Establecí el tamaño de la celda utilizando el método sizeForItemAtIndexPath y configuré cada celda como UIScreen.mainScreen().bounds.width/2 en altura y ancho. Entonces, esencialmente, cada celda tiene la mitad de la pantalla y esta misma longitud en altura.

Luego tengo un UIImageView dentro de la celda con cada borde fijado a su borde relativo de la celda para que la vista de la imagen llene la celda. También tengo un UILabel que se centra tanto vertical como horizontalmente en la celda.

Sin embargo, en la primera carga, la celda tiene el tamaño correcto, pero el contenido es mucho más pequeño en un pequeño cuadrado en la parte superior izquierda. (Visto en la imagen a continuación, he configurado el color de fondo de contentView de la celda en verde y el color de fondo de imageView en rojo).

Luego, después de desplazar hacia abajo un poco (y supongo que una celda reutilizable se quita de la cola), todas las celdas están bien (y permanecen bien después de desplazarse hacia atrás).

¿Qué hace que el contenido no se restrinja correctamente en la primera carga?

ACTUALIZAR

Parte del código de mi UIViewController :

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { var cell = collectionView.dequeueReusableCellWithReuseIdentifier("PrevDrawCell", forIndexPath: indexPath) as? PrevDrawCell if cell == nil { cell = PrevDrawCell() } cell!.drawVC = self cell!.imageShortCode = self.tempImageURLs[indexPath.row] // Pull image (async) and set after download cell!.setupImage() cell!.contentView.backgroundColor = UIColor.greenColor() cell!.coverView.backgroundColor = UIColor.redColor() cell!.dateLabel.font = UIFont(name: "HelveticaNeue-Light", size: 26) cell!.dateLabel.text = "/(self.tempImageURLs.count-indexPath.row)/9" return cell! } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let size = UIScreen.mainScreen().bounds.width/2 return CGSize(width: size, height: size) } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { return UIEdgeInsetsZero } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat { return 0 } func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { return 0 }


Una vez tuve un problema similar (el contenido de mi celda no era compatible con la celda incluso con el autodiseño correcto). El error se produjo al no llamar a super.layoutSubviews() en la función reemplazada layoutSubviews () que estaba en la clase de Cell.