¡Esto me está volviendo loco! Tengo un UICollectionViewController como se muestra a continuación:
class PhrasesCompactCollectionViewController: UICollectionViewController
Se llama a numberOfSections y cellForItemAt, pero nunca se llama a sizeForItemAtIndexPath. Estoy usando el mismo código exacto en otro lugar y se dispara correctamente. Estoy usando Xcode 8 Beta 6.
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 120, height:120)
}
En Swift 3+ use este método:
Asegúrese de que su clase cumpla tanto Delegar
UICollectionViewDelegate
UICollectionViewDelegateFlowLayout
fuente
UICollectionViewDelegate
que ya hace UICollectionViewController.Yo tuve el mismo problema. Lo único que me ayudó fue hacer el 'Tamaño estimado' para el Tamaño de celda en el inspector de tamaño de collectionView 'Ninguno'.
fuente
sizeForItemAt
no mencionaron esto. Muy útil.sizeForItemAt
funcionó bien hasta Xcode 11.4 cuando de repente las celdas tenían un ancho incorrecto. Probé un montón de cosas y finalmente funcionó.Swift 3
Para establecer el tamaño de celda de UICollectionView, debe crear y personalizar el objeto
UICollectionViewFlowLayout
. Personalice las propiedades y establezca ese objeto de diseño en el objeto UICollectionView.Cambie los objetos cellheight y cell cellWidth según sus requisitos (la altura y el ancho de celda que desee).
Asegúrese: si agregó el método sizeForItemAt indexPath, entonces debe ELIMINAR el método ...
fuente
Rápido 5
Todos estos pasos son obligatorios :
UICollectionViewDelegate, UICollectionViewDataSource
collectionView.delegate = self
ycollectionView.dataSource = self
como :
fuente
La primera clase necesita confirmar con UICollectionViewDelegateFlowLayout. Entonces necesitas escribir el siguiente código en viewDidLoad ():
// Para decirle a UICollectionView que use los métodos UICollectionViewDelegateFlowLayout de su UIViewController
// Si desea configurar su propio diseño de flujo de vista de colección
Al usar este código, método UICollectionViewDelegateFlowLayout
se llamará, puede establecer el tamaño en este método.
fuente
Tres cosas que debe verificar si ninguna respuesta funciona:
Implementar el delegado de FlowLayout:
class MyController: UICollectionViewController, UICollectionViewDelegateFlowLayout
Utilice el método para el tamaño del artículo para swift 3.0+:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: (collectionView.frame.width / 3) - 1, height: collectionView.frame.width) }
Seleccione
Estimate size = None
en Inspeccionar elemento de UICollectionView.fuente
Tuve el mismo problema y nada lo solucionaría. Tenía una advertencia amarilla que decía que lo hiciera privado porque se acercaba a otra función definida por el Delegado de diseño. Lo que me arregló fue:
Observe la diferencia entre "sizeForItemAtIndexPath" y el "sizeForItemAt" correcto.
Me arranqué el pelo durante días tratando de resolver esto y finalmente funcionó. A continuación, incluiré todas mis funciones para mostrarles cómo también "escondí" una celda haciendo que la altura fuera igual a 0.
fuente
Tuve este problema anoche. Finalmente lo resolví a la medianoche cuando me di cuenta de que el método 'didSelectItemAtIndex' no estaba cerrado con un corchete de cierre "}"
Agregué un corchete de cierre en la parte inferior de la clase cuando me preguntó por el error de compilación. Entonces, en efecto, todos los métodos debajo de 'didSelectItemAtIndex' estaban dentro de ese método.
Publicando aquí solo en caso de que alguien más pierda 4 horas de sus tardes en este :-(
fuente
Asegúrese de poner esto en viewDidLoad ()
fuente
mi problema era que tenía mi objeto UICollectionViewDataSource creado como variable local. Entonces, si inicializa su objeto dataSource manualmente en código, asegúrese de almacenarlo como variable global.
fuente
Usa este método
En vez de
fuente
Simplemente agregue: UICollectionViewDelegateFlowLayout
fuente
Para mí (en Swift 3.1) el método debe declararse público de esta manera:
No olvide hacerlo público .
fuente
public
es lo que usa para hacer que su código sea accesible entre marcos y módulos.