UICollectionviewCell 总是放置在视图的边缘

Posted

技术标签:

【中文标题】UICollectionviewCell 总是放置在视图的边缘【英文标题】:UICollectionviewCell always placing at the edge of the view 【发布时间】:2017-05-31 19:48:17 【问题描述】:

我的UICollectionViewCells 总是放在UICollectionView 的边缘。总是有这样的中间空间。

这是什么原因?而且我想始终每行保留 3 个项目。但是这样它只是设置了2。如何解决这个问题? 请帮我。 谢谢

更新

let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical //.horizontal
    layout.itemSize = cellSize
    layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
    layout.minimumLineSpacing = 1.0
    layout.minimumInteritemSpacing = 1.0
    layout.minimumLineSpacing=1.0

    btncollectionView.setCollectionViewLayout(layout, animated: true)
    btncollectionView.reloadData()

【问题讨论】:

看不详细,似乎您的UICollectionView 宽度无法承受使用此UICollectionViewCells 宽度的3 列。您是否为此设置了正确的宽度和约束? 我添加了一个带有前导和尾随 50 的子视图,并且我的 collectionview 所有 4 个边都设置为 0 约束,我的单元格大小为 (self,view,size.width-100)/3 【参考方案1】:

适用于水平和垂直滚动方向以及可变间距

声明每行所需的单元格数

let numberOfCellsPerRow: CGFloat = 3

配置flowLayout 渲染指定的numberOfCellsPerRow

if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout 
    let horizontalSpacing = flowLayout.scrollDirection == .vertical ? flowLayout.minimumInteritemSpacing : flowLayout.minimumLineSpacing
    let cellWidth = (view.frame.width - max(0, numberOfCellsPerRow - 1)*horizontalSpacing)/numberOfCellsPerRow
    flowLayout.itemSize = CGSize(width: cellWidth, height: cellWidth)

【讨论】:

你能看到我的更新吗,我已经设置了这些但还是一样 cellSize 的值是多少? width =height=104.666 它不应该是一个常数值,你需要像我上面那样计算 我说的是当前值。我正在计算它 (self.view.size.width-100)/3

以上是关于UICollectionviewCell 总是放置在视图的边缘的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UICollectionViewCell 内的 UILabel 的值?

以没有中间间距的方式设置 UICollectionViewCell 的大小

awakeFromNib() 在滚动开始时在 UICollectionViewCell 子类中调用了两次

iOS UICollectionViewCell

UICollectionViewCell 在collectionview的多个单元格中看到的一个变化

在布局之间制作动画时,自动布局不会调整 Uicollectionviewcell 项目的大小