Dimensionnement dynamic UICollectionViewCell pour 4.4 et 5.5 pouces

J'ai UICollectionView avec des cellules dans le storyboard. La taille de chaque cellule est définie sur 145×145.

Ils ont l'air bien sur l'iPhone 4 – 5s, mais la taille n'augmente pas proportionnellement sur l'iPhone 6 et 6+. Plutôt que de définir manuellement une taille de cellule différente pour chaque périphérique, comment puis-je le faire dynamicment?

Voir des exemples ici: iPhone 5S: http://prntscr.com/55vy7q , iPhone 6: http://prntscr.com/55vyy2

Si vous souhaitez que vos cellules ajustent leur largeur, vous devez calculer la itemSize d' itemSize la disposition du itemSize fonction de la largeur de la vue.

  • Si toutes vos cellules ont la même taille , vous pouvez définir la propriété itemSize la disposition de itemSize :

     #define kCellsPerRow 2 UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout; CGFloat availableWidthForCells = CGRectGetWidth(self.collectionView.frame) - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing * (kCellsPerRow - 1); CGFloat cellWidth = availableWidthForCells / kCellsPerRow; flowLayout.itemSize = CGSizeMake(cellWidth, flowLayout.itemSize.height); 

    Si vous souhaitez faire varier dynamicment le nombre de cellules par ligne, j'ai fourni ces informations dans une réponse séparée .

  • Si vous avez besoin de calculer des tailles par cellule , vous pouvez le faire dans la collectionView:layout:sizeForItemAtIndexPath: delegate.

Recalculez itemSize lorsque l'orientation de l'appareil change et mettez à jour la disposition:

  • Redessiner la layout sans animation:

    [self.collectionView.collectionViewLayout invalidateLayout]

  • Animer les modifications de disposition:

    [self.collectionView performBatchUpdates:nil completion:nil]