UICollectionView, simplement adapter la cellule à la largeur?

Voici une simple UICollectionView en jaune

entrez la description de l'image ici

La flèche rouge définit la largeur de la cellule. (À confirmer: en cliquant sur la cellule rose: pour 'taille', select 'Par défaut', ce que vous définissez à la flèche rouge devient la taille de la cellule.)

Exemple, pour une largeur d'iPhone fixe à 320.

Mais cela semble fou … sûrement je peux définir la largeur de la cellule en fonction de la largeur de l'UICollectionView ?

Il n'y a pas de problème autosizing la vue elle-même ..

entrez la description de l'image ici

Cela fonctionne bien.

Mais il semble fou que je ne puisse pas définir la largeur de la CELLULE pour qu'elle soit "identique à la vue". Il semble difficile de croire qu'il faut le définir manuellement, dans le code?

En d'autres termes, comme le souligne Nikita,

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

(En effet, vous avez aussi généralement besoin de cela …)

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

En fait – vous devez le faire en code ?! Il n'y a aucun moyen de faire ça dans Storyboard, avec autolayout, ou autre chose ?!

Je pense que vous devez jeter un oeil à

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

de UICollectionViewLayout où vous pouvez définir la taille en fonction de l'orientation et du cadre actuel.


Il semblerait en effet que vous devez simplement le faire dans le code.

Il y a un moyen simple de le faire. Voici le code rapide. Suppose que vous voulez un élément large et dans l'exemple mes cellules sont 64 pts de haut, et je veux 8 pts pour les marges latérales, et finalement collectionView est le nom de votre UICollectionView.

Insérez ceci dans viewDidLoad:

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

Cela définira toutes les cellules par défaut à cette taille. Vous pouvez toujours replace des cellules individuelles si vous sous-classz UICollectionViewLayout ou UICollectionViewFlowLayout, comme mentionné dans d'autres réponses. Mais si vous voulez simplement avoir plus de vue sur la table comme un comportement, cela devrait fonctionner.

J'ai ma cellule de cas en faisant des forms supplémentaires entrez la description de l'image ici