Propiedad de tamaño de celda del prototipo iOS UICollectionView ignorada

Estoy usando una UICollectionView con dos celdas prototipo. Las celdas prototipo tienen diferentes anchos y contienen diferentes controles (vista de image y vista web). Definitivamente estoy devolviendo la celda de prototipo correcta para un índice dado (todas las celdas muestran el contenido correcto), pero se ignora el tamaño de celda del prototipo y se usa el tamaño del elemento de la vista de la colección. No es como si estuviera configurando manualmente el tamaño. ¿Cuál es el objective de permitir que la celda del prototipo se dimensione en el guión gráfico si la propiedad simplemente se ignora cuando se muestra realmente?

El tamaño de la celda en el editor de guiones charts es solo para ayudarte a diseñar la celda. Como cada celda de prototipo puede tener un tamaño diferente, UICollectionView no sabe qué celda debe elegir para todas las celdas. Es por eso que establece el tamaño real que desea usar para sus células por separado. Puede hacerlo en el diseñador seleccionando la vista de colección y configurando su Ancho y altura del tamaño de celda en el inspector de Tamaño, debajo del encabezado "Tamaño de la vista de la colección".

O bien, puede anular el siguiente método y devolver un object CGSize que especifique el tamaño que desea usar para cada celda. Con este método, puede hacer que cada celda tenga un tamaño diferente:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 

Ejemplo:

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(100, 100); } 

El controller de vista debe ser un delegado de UICollectionViewDelegateFlowLayout para que se llame a este método. Por lo tanto, no olvide agregar esa statement de delegado al file .h del controller de vista, como por ejemplo:

 @interface MyViewController () <UICollectionViewDelegateFlowLayout> 

Si todas las celdas tienen el mismo tamaño y puede establecer itemSize en UICollectionViewFlowLayout

Ejemplo:

 ((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100); 

Swift, trabajando para el último iOS.

 (collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize 

No tengo suficientes puntos para responder a Sam, pero la key es que no es UICollectionViewLayout sino UICollectionViewFlowLayout.

En Swift puede llamar al método de delegado sizeForItemAtIndexPath para establecer el tamaño para cada celda.

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { if indexPath.row == 0 { // Set the size for cell no. 0 }else if indexPath.row == 1 { // Set the size for cell no. 1 } } 

Espero que eso ayude. ¡Gracias!

Si todas sus celdas tienen el mismo tamaño, simplemente debe establecer las properties de tamaño de celda de UICollectionView a las mismas que las properties de tamaño de celda de UICollectionViewCell .

Puede establecer el tamaño de UICollectionViewCell en UICollectionView properties UICollectionView .

En Storyboard, select Collection View en el Document Outline del Document Outline , luego edite su Cell Size en el Size Inspector .

Y debe cambiar el tipo de tamaño de la celda a Pnetworkingeterminado, si es Personalizado.

Use su delegado pnetworkingeterminado. . .

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize mElementSize; mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60); return mElementSize; }