具有3列的UICollectionView无法产生预期的结果

时间:2018-10-11 18:33:53

标签: swift uicollectionview uicollectionviewcell uicollectionviewdelegateflowlayout

我正在iPhone XR模拟器上对此进行测试。我有3行图像,我希望它们以3列显示,顶部,左侧,右侧和底部2点距离。这曾经可以工作,但由于某种原因,现在没有了。

extension ProfileVC : UICollectionViewDelegateFlowLayout {
override func size(forChildContentContainer container: UIContentContainer, withParentContainerSize parentSize: CGSize) -> CGSize {
    return CGSize(width: collectionView.bounds.width / 3, height: collectionView.bounds.width / 3)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 0
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 2, left: 2, bottom: 2, right: 2)
}
}

这是我的结果:

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试实现sizeForItemAt indexPath方法,以仅基于项目宽度根据屏幕宽度动态调整项目视图的三列。 获取屏幕宽度或集合视图宽度,然后减去您喜欢的空格(8),然后除以3(3列)。 另外,从情节提要或nib文件中,将minSpacing设置为第2行,将节插入设置为top = 2,并注释上述方法并仅实现此方法

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = (collectionView.frame.width - 8) / 3
    return CGSize(width: width, height: width)
}