Utilice este método para establecer un ancho de altura de celda personalizado.
Asegúrese de agregar estos protocolos
UICollectionViewDelegate
UICollectionViewDataSource
UICollectionViewDelegateFlowLayout
Si está utilizando rápida 5 o Xcode 11 y más tarde Es necesario que ajuste Estimate Size
a none
usar guión gráfico con el fin de hacer que funcione correctamente. Si no lo configura, el siguiente código no funcionará como se esperaba.
Swift 4 o posterior
extension YourViewController: UICollectionViewDelegate {
//Write Delegate Code Here
}
extension YourViewController: UICollectionViewDataSource {
//Write DataSource Code Here
}
extension YourViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: screenWidth, height: screenWidth)
}
}
C objetivo
@interface YourViewController : UIViewController<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame)));
}
Asegúrese de agregar el protocolo
UICollectionViewDelegateFlowLayout
en suclass
declaraciónfuente
Si uno está usando un guión gráfico y anulando UICollectionViewDelegateFlowLayout , en swift 5 y Xcode 11 también establezca Estimate size en None
fuente
UICollectionViewFlowLayout
parece predeterminadoestimatedItemSize
aUICollectionViewFlowLayout.automaticSize
cuando se utiliza IB a pesar de que la documentación dice que debería defectoCGSizeZero
. Como afirma Apple,automaticSize
"habilita las celdas de tamaño propio para la vista de su colección". Es por eso que otros cambios de tamaño en IB no hacen nada.Finalmente obtuve la respuesta. Debería extender
UICollectionViewDelegateFlowLayout
Esto debería funcionar con las respuestas anteriores.
fuente
Tiene 2 formas de cambiar el tamaño de CollectionView.
Primera forma -> agregue este protocolo UICollectionViewDelegateFlowLayout
para En mi caso, quiero dividir la celda en 3 partes en una línea. Hice este código a continuación
Segunda forma -> no tiene que agregar UICollectionViewDelegateFlowLayout pero tiene que escribir un código en la función viewDidload en su lugar como el código siguiente
Independientemente de lo que escriba un código como primera o segunda forma, obtendrá el mismo resultado que el anterior. Yo lo escribi. Funcionó para mi
fuente
Relación de tamaño según el tamaño del iPhone:
Esto es lo que puede hacer para tener diferentes anchos y altos para las celdas con respecto al tamaño del iPhone:
Y tal vez también debería deshabilitar sus restricciones de Autodiseño en la celda para que esta respuesta funcione.
fuente
La vista de colección tiene un objeto de diseño . En su caso, probablemente sea un diseño de flujo ( UICollectionViewFlowLayout ). Establezca la
itemSize
propiedad del diseño de flujo .fuente
en Swift3 y Swift4 puede cambiar el tamaño de celda agregando UICollectionViewDelegateFlowLayout e implementando es así:
o si crea UICollectionView mediante programación, puede hacerlo así:
fuente
swift4 swift 4 ios colección ver colección ver ejemplo xcode último código muestra de trabajo
Agregue esto en la sección Delegado de la parte superior
UICollectionViewDelegateFlowLayout
y usa esta función
///// código completo de muestra
crear en la vista de colección y la celda de vista de colección en el guión gráfico hace referencia a la colección como
@IBOutlet débil var cvContent: UICollectionView!
pegar esto en el controlador de vista
fuente
Prueba el método siguiente
fuente
Swift 5 mediante programación
fuente
fuente
2020, de forma absolutamente sencilla:
Debe agregar "UICollectionViewDelegateFlowLayout" o no hay autocompletar:
Escriba "sizeForItemAt ...". ¡Listo!
Eso es.
Por ejemplo, si desea "cada celda ocupa toda la vista de la colección":
fuente
Otra forma es establecer el valor directamente en el diseño del flujo.
fuente
Por lo tanto, debe configurar desde el guión gráfico para el atributo de collectionView en el tamaño estimado de la sección de celda en ninguno, y en su ViewController necesita tener un método delegado para implementar este método:
optional func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
fuente
Intente utilizar el método UICollectionViewDelegateFlowLayout. En Xcode 11 o posterior, debe configurar Estimate Size en none desde el guión gráfico.
fuente
Una forma sencilla:
Si solo necesita un tamaño fijo simple :
Eso es todo al respecto.
En el guión gráfico, simplemente cambie la clase de UICollectionView a SizedCollectionView.
Pero !!!
Observe que la clase base es "UI 'I' CollectionView". 'I' para inicializador.
No es tan fácil agregar un inicializador a una vista de colección. Este es un enfoque común:
Vista de colección ... con inicializador:
En la mayoría de los proyectos, necesita "una vista de colección con un inicializador". Así que probablemente de todos modos tendrá
UIICollectionView
(tenga en cuenta la I adicional para Initializer) en su proyecto.fuente
Swift 5, Programmatic UICollectionView configuración Ancho y alto de celda
fuente
Esta es mi versión, encuentre la proporción adecuada para obtener el tamaño de celda según sus requisitos.
fuente