Ajuster le nombre de cellules donné dans uicollectionview par ligne

J'ai une vue de collection et j'aimerais avoir 4 cellules par rangée. Je sais que pour accomplir ceci tout ce que je dois faire est de split collectionview.frame.size.width par 4. C'est facile. Cependant, ce que je ne peux pas comprendre, c'est comment prendre en considération les encarts à côté de la vue de collection et l'espacement entre les cellules. J'ai inséré 10 pixels à gauche et à droite de la vue de collection, ainsi qu'un espacement de 10 pixels entre les cellules. Comment puis-je calculer la largeur de cellule requirejse en tenant count de ces 10 pixels?

Pour mieux expliquer les maths, l'exemple de faarwa est seulement pour 4 cellules. En supposant 1 rangée, il y a 5 blocs d'espacement pour 4 éléments de cellule (tenir 4 doigts et countr les espaces de l'extrémité distale de l'auriculaire jusqu'à l'extrémité de l'index).

Il y aura toujours n + 1 espaces pour les n cellules que vous avez dans une rangée. Faarwa suppose que chaque espace est de 10 alors il a multiplié 5 cellules par 10 pour get 50. Vous devez déterminer combien d'espace il vous rest à travailler après le rembourrage – donc si votre largeur d'écran est de 200, vous devez soustraire les deux valeurs récupère la largeur restante, ou "(collectionView.frame.size.width-50)".

En continuant avec l'hypothèse de 200 largeurs et 4 éléments de cellule, vous devez split votre différence (150) par 4 pour get la largeur que chaque cellule doit avoir pour un espacement égal.

Expérimenter et passer par quelques essais et erreurs, mais voici les 2 methods que j'ai utilisées pour get une vue de collection des sets d'exercices à partir d'un tableau d'objects set.

 // UICollectionViewDataSource method func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let numberOfSets = CGFloat(self.currentExSets.count) let width = (collectionView.frame.size.width - (numberOfSets * view.frame.size.width / 15))/numberOfSets let height = collectionView.frame.size.height / 2 return CGSizeMake(width, height); } // UICollectionViewDelegateFlowLayout method func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { let cellWidthPadding = collectionView.frame.size.width / 30 let cellHeightPadding = collectionView.frame.size.height / 4 return UIEdgeInsets(top: cellHeightPadding,left: cellWidthPadding, bottom: cellHeightPadding,right: cellWidthPadding) 

}

CAPTURE D'ÉCRAN:

entrez la description de l'image ici deux éléments de la cellule

quatre éléments de la cellule entrez la description de l'image ici

Swift 3.0. Fonctionne pour les directions de défilement horizontal et vertical et l'espacement variable

Déclarez le nombre de cellules que vous voulez par ligne

 let numberOfCellsPerRow: CGFloat = 4 

Configurer flowLayout pour rendre numberOfCellsPerRow spécifié

 if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout { let horizontalSpacing = flowLayout.scrollDirection == .vertical ? flowLayout.minimumInteritemSpacing : flowLayout.minimumLineSpacing let cellWidth = (view.frame.width - max(0, numberOfCellsPerRow - 1)*horizontalSpacing)/numberOfCellsPerRow flowLayout.itemSize = CGSize(width: cellWidth, height: cellWidth) } 
 (collectionView.frame.size.width-50)/4 

Pour rendre count de l'espace, vous pouvez le soustraire de la largeur du cadre de la vue de collection (en soustrayant 5*10 ).