Voici un simple UICollectionView en jaune
La flèche rouge définit la largeur de la cellule. (TBC: en cliquant sur la cellule rose: pour "taille", sélectionnez "Par défaut", alors ce que vous définissez sur la flèche rouge devient la taille de la cellule.)
Par exemple, pour un iPhone droit, définissez une largeur de 320.
Mais cela semble fou ... Je peux sûrement définir la largeur de la cellule en fonction de la largeur de UICollectionView ?
Il n'y a pas de problème à redimensionner automatiquement la vue elle-même.
Cela fonctionne bien.
Mais il semble insensé que je ne puisse pas régler la largeur de la cellule pour qu'elle soit "identique à la vue". Il semble difficile de croire qu’il faut le définir manuellement, en code?
TBC 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 en avez aussi généralement besoin ...)
-(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 cela 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 deviez simplement le faire en code.
Il existe un moyen simple de le faire. Voici le code Swift. Supposons que vous souhaitiez un élément de largeur et que, dans l'exemple, mes cellules mesurent 64 pts de hauteur, 8 pts pour les marges latérales et enfin, 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 sur cette taille par défaut. Vous pouvez toujours remplacer des cellules individuelles si vous sous-classez UICollectionViewLayout ou UICollectionViewFlowLayout, comme indiqué dans d'autres réponses. Mais si vous voulez simplement avoir plus de vues sous forme de tableau, cela devrait fonctionner.