UICollectionView 项目间距不是恒定的

Posted

技术标签:

【中文标题】UICollectionView 项目间距不是恒定的【英文标题】:UICollectionView items spacing is not constant 【发布时间】:2021-02-10 08:58:33 【问题描述】:

我正在尝试显示一个集合视图,其中每个单元格在边框内显示一个字符串。我已将方向设置为 VERTICAL。因此,每行中可以有多个具有动态大小的单元格。但是单元格以不同的项目间空间显示。

当前收集状态视图:

我的收藏视图配置如下:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    if(collectionView == tagsCollectionView)
    
        if(self.propertyTypes.count > 0)
        
            if(indexPath.row == 0)
            
                return CGSize(width: "You searched for properties in: ".width(withConstrainedHeight: 25, font: UIFont(name: "Avenir-Book", size: 13)!), height: 30)
            
            return CGSize(width: self.propertyTypes[indexPath.row - 1].width(withConstrainedHeight: 25, font: UIFont(name: "Avenir-Book", size: 13)!), height: 30)
        
        return CGSize(width: 0, height: 0)
    
    return "String".size(withAttributes: nil)

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


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat 
    return 5

但是,当方向为水平方向时,集合视图工作得非常好。

【问题讨论】:

尝试使用这个collectionview flowlayout 类来摆脱这个计算:- github.com/Digipolitan/collection-view-left-align-flow-layout 这是默认布局的行为。这就像“对齐文本”。适合线宽,除了最后一行。你需要一个自定义布局来实现你想要的。 尝试将代码放入 didLoad():- yourCollectionView.collectionViewLayout = DGCollectionViewLeftAlignFlowLayout() 是的,@KishanBarmawala。 @KishanBarmawala 谢谢兄弟!你让我今天一整天都感觉很好!干杯 【参考方案1】:

您可以使用 pod:https://github.com/mischa-hildebrand/AlignedCollectionViewFlowLayout 来实现您的功能。

你可以用这个库实现左、右、对齐等。

像这样使用它:

let alignedFlowLayout = collectionView?.collectionViewLayout as? AlignedCollectionViewFlowLayout
alignedFlowLayout?.horizontalAlignment = .left
alignedFlowLayout?.verticalAlignment = .top

查看库以获取更多详细信息。

【讨论】:

以上是关于UICollectionView 项目间距不是恒定的的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式配置最大项目间距(swift 3.0)

UICollectionView:在标题和项目之间添加间距

动态调整 UICollectionView 大小以确保没有项目间距

全屏 UICollectionView:如何在滚动时在全屏单元格(或部分)之间添加间距

纵向和横向的 UICollectionView 单元格间距

Xcode 6 Auto Layout - 所有设备的 UI 元素之间的恒定水平间距