具有 3 列的 UICollectionView 不会产生所需的结果

UICollectionView with 3 columns doesn't produce the desired result

我正在 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)
}
}

这是我的结果:

尝试实施 sizeForItemAt indexPath 方法,将您的集合视图固定为仅三列,项目大小根据屏幕宽度动态变化。 获取屏幕宽度或集合视图宽度,然后减去您喜欢的空格 (8),然后除以 3(3 列)。 此外,从您的故事板或 nib 文件中为 lines = 2 设置 minSpacing 并为 top = 2 设置 section insets 并评论您的上述方法并仅实施此方法

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