UICollectionViewCell中的Autolayout宽度常量不能很好地工作

时间:2016-05-12 07:59:36

标签: ios swift autolayout swift2 uicollectionviewcell

下面是一个uicollectionviewcell,条形宽度必须根据它右边的数字(投票数),事件我在控制台中记录它的宽度范围,你可以看到它的正确计算,但在ui,其中两个似乎不能很好地工作,如果我多次滚动集合视图它将被修复,然后它将再次失败,如何在单元格中正确设置视图的禁令?

enter image description here

代码太长了,但我想在这里总结一下 1)在viewcontroller的cellForItem中 cell.setup()
cell.layoutIfNeeded()
返回单元格

2)在单元格的设置中()
setupBarWidths()

3)在setupBardWidhts()中 resetAllWitdhs - > 0
计算和设置宽度

这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

这取决于你如何在uicollectionviewcell中为子视图设置常量。

如果您的单元格没有正确更新约束,可能的解决方案是there

您必须为水平条提供单独的宽度约束,并在每次重新加载单元格时设置它。

  

"如果我多次滚动收集视图,它将被修复"

如果您没有正确处理约束更改,则会出现此问题,例如,您有" if - else"您的代码中的子句,并且您不会实现一个分支。

无论如何,如果您分享collectionView(_:cellForItemAt:)

,提供解决方案要容易得多

更新:

UICollectionView内部有很多bug,所以一种可能的解决方案是覆盖UICollectionViewCell并插入以下方法:

override var bounds: CGRect {
    didSet {
      contentView.frame = bounds
    }
}

有关详细信息,请参阅this主题。