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]