我正试图使图像的集合视图,以便每行有3个,与一些间距之间。
验证码:-
func setupCollectioView(){
guard let collectionView = gridPhotosCollectionview, let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }
flowLayout.minimumInteritemSpacing = 2
flowLayout.minimumLineSpacing = 2
flowLayout.sectionInset = UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2)
gridPhotosCollectionview.delegate = self
gridPhotosCollectionview.dataSource = self
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let noOfCellsInRow = 3
let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout
let totalSpace = flowLayout.sectionInset.left + flowLayout.sectionInset.right + (flowLayout.minimumInteritemSpacing * CGFloat(noOfCellsInRow - 1))
let size = Int((collectionView.bounds.width - totalSpace) / CGFloat(noOfCellsInRow))
return CGSize(width: size, height: size)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
let totalCount = selectedImages.count + selectedPostDetailImages.count
if totalCount == 1 {
let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: collectionView.frame.width - flowLayout.itemSize.width)
}
return UIEdgeInsets.zero
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 10
}
上面的代码适用于iPhone 11的所有设备。它在iPhone 11以下不工作。请检查所附的屏幕截图。
iPhone 11屏幕截图:-
iPhone XS屏幕截图:-
问:Swift如何设置单元格框架,使其在所有设备中每行正好适合3个单元格?
有人可以请向我解释如何做到这一点,我已经尝试了上述代码,但还没有结果。如果我做错了请纠正我。
任何帮助将不胜感激。
1条答案
按热度按时间vjhs03f71#
是我的错,我没有将估计大小设置为零。现在一切正常