UICollectionView, ¿simplemente encaja celda a ancho?

Aquí hay un simple UICollectionView en amarillo

introduzca la descripción de la imagen aquí

La flecha roja establece el ancho de la celda. (TBC: haciendo clic en la celda rosa: para 'tamaño' selecciona 'Pnetworkingeterminado', entonces lo que estableces en la flecha roja se convierte en el tamaño de la celda).

Ejemplo, para un iPhone con un ancho vertical de 320.

Pero esto parece una locura … seguramente puedo configurar el ancho de celda en function del ancho de UICollectionView ?

No hay problema para automatizar la vista en sí misma.

introduzca la descripción de la imagen aquí

Eso funciona bien.

Pero parece una locura que no pueda configurar el ancho de la CÉLULA como "igual que la vista". Parece difícil creer que uno tiene que configurarlo manualmente, ¿en código?

TBC En otras palabras, como señala Nikita,

-(CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return self.view.frame.size; } 

(de hecho, también típicamente necesitas esto …)

 -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(0,0,0,0); //t,l,b,r } 

De hecho, tienes que hacer eso en el código? ¡No hay forma de hacer eso en Storyboard, con autolayout o cualquier otra cosa!

Creo que necesitas echar un vistazo a

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

de UICollectionViewLayout donde puede establecer el tamaño según la orientación y el marco actual.


De hecho, parece que simplemente tienes que hacer esto en código.

Hay una manera simple de hacer esto. Aquí está el código rápido. Supone que desea un artículo de ancho y, en el ejemplo, mis celdas tienen 64 puntos de alto, y quiero 8 puntos para los márgenes laterales, y finalmente, collectionView es el nombre de su UICollectionView.

Inserte esto en viewDidLoad:

  let layout = collectionView?.collectionViewLayout as! UICollectionViewFlowLayout layout.itemSize = CGSize.init(width: (UIScreen.main.bounds.width - 16), height: 64.0) 

Esto establecerá todas las celdas de forma pnetworkingeterminada a ese tamaño. Aún puede anular las celdas individuales si subclass UICollectionViewLayout o UICollectionViewFlowLayout, como se menciona en otras respuestas. Pero si simplemente quiere tener más vista de tabla como el comportamiento, esto debería funcionar.

Recuadro de celda de mi caso haciendo forms adicionales introduzca la descripción de la imagen aquí