Voici une simple UICollectionView en jaune
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 ..
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