174 votes

Comment définir UICollectionViewCell Width et Height par programmation

Je suis en train de mettre en œuvre un CollectionView. Quand je suis en utilisant la mise en page automatique, mes cellules ne change pas la taille, mais leur alignement.

Maintenant, je voudrais plutôt souhaitez modifier leurs tailles, par exemple

//var size = CGSize(width: self.view.frame.width/10, height: self.view.frame.width/10)

J'ai essayé de réglage dans mon CellForItemAtIndexPath

collectionCell.size = size

il ne fonctionne pas bien.

Est-il un moyen pour y parvenir?

edit:

Il semble que les réponses ne changeront mon CollectionView la largeur et la hauteur de lui-même. Est il y a des conflits dans les Contraintes possible? Toutes les idées sur qui ?

432voto

PinkeshGjr Points 1776

Utilisez cette méthode pour définir la largeur de hauteur de cellule personnalisée.

Assurez-vous d'ajouter ces protocoles

 UICollectionViewDelegate

UICollectionViewDataSource

UICollectionViewDelegateFlowLayout
 

Objectif c

 @interface YourViewController : UIViewController<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame)));
}
 

Swift 4

 extension YourViewController: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
         return CGSize(width: screenWidth, height: screenWidth)
    }

}
 

79voto

pierre23 Points 169

Assurez-vous d’ajouter le protocole UICollectionViewDelegateFlowLayout dans votre déclaration class

 class MyCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout
{
    //MARK: - UICollectionViewDelegateFlowLayout

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
       return CGSize(width: 100.0, height: 100.0)
    }
}
 

23voto

saburo Points 188

Enfin obtenu la réponse. Vous devriez prolonger UICollectionViewDelegateFlowLayout
Cela devrait fonctionner avec les réponses ci-dessus.

14voto

AnthoPak Points 2096

Ratio de taille en fonction de la taille de l'iPhone:

Voici ce que vous pouvez faire pour avoir différentes largeurs et hauteurs de cellules en fonction de la taille de l'iPhone:

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let width = (self.view.frame.size.width - 12 * 3) / 3 //some width
    let height = width * 1.5 //ratio
    return CGSize(width: width, height: height)
}
 

Et peut-être devriez-vous également désactiver vos contraintes de mise en forme automatique sur la cellule pour que cette réponse fonctionne.

7voto

matt Points 60113

La vue de collection a un objet de présentation . Dans votre cas, il s’agit probablement d’une disposition de flux ( UICollectionViewFlowLayout ). Définissez la propriété itemSize la présentation de flux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X