使用UICollectionView大小的变量返回CGSize会导致单元格之间出现不必要的额外间距

时间:2017-04-21 23:38:02

标签: swift swift3 uicollectionview uicollectionviewcell

我正在尝试创建一个水平UICollectionView,其中的单元格大小不同,具体取决于每个单元格中的文本数量。我能够使用下面的代码完成此操作,但它现在导致我的单元格之间有额外的间距。我的minimumLineSpacingForSectionAt已经返回0并且我已经尝试返回一个负数,但两者都没有工作。有谁知道为什么会发生额外的空间以及如何摆脱它?

仅供参考,在我的单元格中,我有一个UILabel,它被约束到单元格的整个尺寸。

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    var stringWidth: CGFloat = 100
    //Finding and setting feedMenuCellWidth
    if let groupName = groups[indexPath.item].name {
        var originalString: String = groupName
        let myString: NSString = originalString as NSString
        let size: CGSize = myString.size(attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 17.0)])
        stringWidth = size.width
   }
    //Returning CGSize
    return CGSize(width: stringWidth + 20, height: frame.height) // with standard width
}


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

1 个答案:

答案 0 :(得分:0)

最小的interitem间距就是它,它是最小的,但如果有额外的空间,UICollectionViewFlowLayout会在项之间分配它。您应该创建自己的UICollectionViewLayout具体实例,而不是使用UICollectionViewFlowLayout集合视图附带的默认UICollectionViewLayout,然后您可以将所有额外空间分配到左侧或右侧,而不是分配它像UICollectionViewFlowLayout之类的元素之间的确实。