Vue de collection avec nombre fixe de lignes et de colonnes

J'ai une vue de collection et souhaite maintenir un nombre cohérent de lignes et de colonnes sur plusieurs périphériques. Sur un iPhone 6s Plus, 6 éléments sont affichés, mais lors de la visualisation de l'application sur un iPhone 5s, seuls quatre éléments sont affichés.

Voir ma layout ici: Mise en page sur iPhone 6s Plus

Comment puis-je faire en sorte que la vue de collection affiche les mêmes éléments sur différents périphériques?

Pour Swift 3.0.

Vérifiez que vous utilisez autoLayout et implémentez UICollectionView sizeForItemAtIndexPath .

  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { return CGSize(width: collectionView.bounds.size.width/3 - yourCellInterItemSpacing, height: collectionView.bounds.size.height/3 - yourCellInterItemSpacing) } 

Cela permettra à votre cellule d'être créée en fonction de la taille de l'écran (en supposant que vous utilisez autoLayout), vous devez split par le nombre de colonnes / lignes que vous voulez. Divisez la largeur par le nombre de colonnes que vous voulez et la hauteur par le nombre de lignes.

Pour fournir des espaces de UICollectionView et de fin comme vous pouvez le voir dans votre capture d'écran, ajoutez simplement des espaces appropriés dans le storyboard à votre UICollectionView . Les espaces de yourCellInterItemSpacing et de fin équivalent à yourCellInterItemSpacing

Assurez-vous que votre class est conforme au protocole UICollectionViewDelegateFlowLayout !

Vous devez calculer la taille de l'object en fonction de la taille d'écran dans la collectionView. L'espacement minimum devrait être fixé.

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { if UIScreen.mainScreen().applicationFrame.width > 375 { //iPhone 6plus //Calculate cell size } else if UIScreen.mainScreen().applicationFrame.width <= 375 && UIScreen.mainScreen().applicationFrame.width > 320 { //iPhone 6 //Calculate cell size } else { //Calculate cell size } return CGSizeMake(width, height) } 

Egalement conforme à UICollectionViewDelegateFlowLayout comme

 class XYZ : UICollectionViewController, UICollectionViewDelegateFlowLayout 

Rendez votre class conforme à UICollectionViewDatasource et UICollectionViewDelegate et ajoutez ces fonctions pour créer 5 colonnes de 10 lignes:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 5 } func numberOfSections(in collectionView: UICollectionView) -> Int { return 10 }