web-dev-qa-db-fra.com

UICollectionView, ajustez simplement la cellule à la largeur?

Voici un simple UICollectionView en jaune

enter image description here

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.

enter image description here

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?!

31
Fattie

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.

31
Nikita Took

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. 

1
Tjp