下面是一个uicollectionviewcell,条形宽度必须根据它右边的数字(投票数),事件我在控制台中记录它的宽度范围,你可以看到它的正确计算,但在ui,其中两个似乎不能很好地工作,如果我多次滚动集合视图它将被修复,然后它将再次失败,如何在单元格中正确设置视图的禁令?
代码太长了,但我想在这里总结一下
1)在viewcontroller的cellForItem中
cell.setup()
cell.layoutIfNeeded()
返回单元格
2)在单元格的设置中()
setupBarWidths()
3)在setupBardWidhts()中
resetAllWitdhs - > 0
计算和设置宽度
这是正确的方法吗?
答案 0 :(得分:0)
这取决于你如何在uicollectionviewcell中为子视图设置常量。
如果您的单元格没有正确更新约束,可能的解决方案是there
您必须为水平条提供单独的宽度约束,并在每次重新加载单元格时设置它。
"如果我多次滚动收集视图,它将被修复"
如果您没有正确处理约束更改,则会出现此问题,例如,您有" if - else"您的代码中的子句,并且您不会实现一个分支。
无论如何,如果您分享collectionView(_:cellForItemAt:)
更新:
UICollectionView内部有很多bug,所以一种可能的解决方案是覆盖UICollectionViewCell并插入以下方法:
override var bounds: CGRect {
didSet {
contentView.frame = bounds
}
}
有关详细信息,请参阅this主题。