Вы можете решить эту проблему, используя несколько разделов. Номер раздела должен быть
numberOfSection = totalItemCount/3 > Int(totalItemCount/3) ? Int(totalItemCount/3) + 1 : Int(totalItemCount/3)
не используйте потолок. Тогда количество предметов в разделе должно быть
numberOfItemInSection = totalItemCount-section*3 < 3 ? totalItemCount-section*3 : 3
Затем реализуйте делегат UICollectionViewDelegateFlowLayout
. Где в collectionView(_ collectionView:, layout:, insetForSectionAt:)
указан
let minimumInterItemSpacing: CGFloat = 8.0
// minimumInterItemSpacing should be same in the delegate function
let itemCountInSection = collectionView.numberOfItems(inSection: section)
let edgeSpace = (collectionView.bounds.width - ((itemCountInSection*self.itemWidth) + (minimumInterItemSpacing*(itemCountInSection-1)))) / 2
return UIEdgeInsets(top: self.topSpace, left: edgeSpace, bottom: self.bottomSpace, right: edgeSpace)
установить другие методы делегата так, как вам удобно.