单元格 UICollectionView 之间的间距不正确

Posted

技术标签:

【中文标题】单元格 UICollectionView 之间的间距不正确【英文标题】:Incorrect spacing between cells UICollectionView 【发布时间】:2017-11-23 13:26:11 【问题描述】:

我有一个UICollectionView,其中包含UICollectionViewCells,其中包含UIButtons 用于内容。

但是每个单元格之间的间距不正确不正确。集合视图中的单元格没有特定的大小,因为它应该是一个长度明显不同的标签列表。

这是它的样子:

每个单元格之间的水平间距完全不正确,因为它们因行而异。

单元格的代码:

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
    @IBOutlet weak var wordsCollection: UICollectionView!
    var items = ["test", "this", "word view", "like", "collection", "testing", "give", "this", "testing", "test", "test", "this", "word view", "like", "collection", "testing", "give", "this", "testing", "test", "test", "this", "word view", "like", "collection"]
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return self.items.count
    

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "wordCell", for: indexPath as IndexPath) as! WordCell
        cell.wordButton.setTitle(items[indexPath.row], for: UIControlState.normal)
        cell.wordButton.backgroundColor = UIColor.gray
        if(indexPath.row % 3 == 0)
            cell.wordButton.backgroundColor = UIColor.gray
        
        cell.wordButton.clipsToBounds = true
        cell.wordButton.layer.cornerRadius = 2
        cell.wordButton.sizeToFit()

        return cell
    

    override func viewDidLoad() 
        super.viewDidLoad()
        if let flowLayout = wordsCollection.collectionViewLayout as? UICollectionViewFlowLayout  flowLayout.estimatedItemSize = CGSize(width:1, height:1) 
        // Do any additional setup after loading the view, typically from a nib.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    



语言是 Swift 4,我的目标是 ios 10.3。

【问题讨论】:

你还没有实现 UICollectionview 的 Flow Layout 委托,然后实现方法 interItemSpacing 和 minimumLineSpacing 【参考方案1】:

实现:UICollectionViewDelegateFlowLayout

然后:

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


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

【讨论】:

感谢您的建议!刚刚试了一下,它已经有所改善,但在某些行中仍然关闭。 i.imgur.com/yvLAu0s.png 您是否要对齐它们?否则它只会尝试填充行,我猜你在单元格中使用自动布局,尝试将前导/尾随的优先级设置为 500 遗憾的是两者都没有任何区别。我认为由于flowLayout.estimatedItemSize = CGSize(width:1, height:1) 在我的viewDidLoad() func 中为单元格启用了自动布局。 抱歉,我认为您的 WordCell 内部存在一些混淆,标签上的前导和尾随约束优先级为 500 别担心!是的,对不起,我的意思是我已经尝试了标签上的限制,优先级 500

以上是关于单元格 UICollectionView 之间的间距不正确的主要内容,如果未能解决你的问题,请参考以下文章

单元格 UICollectionView 之间的间距不正确

如何删除 UICollectionView 中单元格之间的空间? [复制]

Swift:UICollectionView - 固定单元格之间的空间

UICollectionView,UICollectionViewFlowLayout:不同的单元格宽度和相同的单元格之间定义的间距

UICollectionView 项目、部分和单元格之间有啥区别? [关闭]

如何禁用 UICollectionView 部分之间的单元格拖动?