子视图约束



我似乎不明白,当我在模拟器中构建应用程序时,我的左/右UIEdgeInsets不会受到影响。除此之外,我希望我的UICollectionView单元格连续3项,但我得到的只是单元格相互不足,而且它们很长。我哪里错了?

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 100)
}

在您的代码中,

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 100)  >>>> You are applying parent view width(full width) to item width
}

将以下代码添加到sizeForItemAt方法中,以获得您想要的输出

//define constant value as per your requirement and declare this variables globally
let inset: CGFloat = 10 //define as per your requirement
let minimumInteritemSpacing: CGFloat = 10 //define as per your requirement
let cellsPerRow = 3
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

let marginsAndInsets = inset * 2 + collectionView.safeAreaInsets.left + collectionView.safeAreaInsets.right + minimumInteritemSpacing * CGFloat(cellsPerRow - 1)

let itemWidth = ((collectionView.bounds.size.width - marginsAndInsets) / CGFloat(cellsPerRow)).rounded(.down)

return .init(width: itemWidth, height: itemWidth)

}

您可以这样逐行显示三个单元格功能

let spaceBetweenCells: CGFloat = 10
collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (collectionView.frame.width - 2* spaceBetweenCells)/3, height: 100)
}

最新更新