UICollectionViewCell 中的自动布局宽度常量无法正常工作

Posted

技术标签:

【中文标题】UICollectionViewCell 中的自动布局宽度常量无法正常工作【英文标题】:Autolayout Width Constants in UICollectionViewCell doesn't work well 【发布时间】:2016-05-12 07:59:35 【问题描述】:

下面是一个uicollectionviewcell,条形宽度必须根据它右边的数字(票数),事件我在控制台中记录它的宽度内容你可以看到它的计算正确,但是在ui上,其中两个似乎没有效果很好,如果我多次滚动collectionview它会被修复,然后它会再次失败,如何在单元格中正确设置视图的约束?

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

2) 在单元格的 setup() setupBarWidths()

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

这是正确的方法吗?

【问题讨论】:

请出示您的代码? 看起来像单元重用问题。尝试在您的单元格中实现 prepareForReuse,并将约束设置为 0。 请添加我的代码摘要检查 @turushan,您是否为宽度创建了自动布局约束?还是您只是更改了框架并调用 layoutIfNeeded ? @Doro 使用故事板创建宽度约束,根据计算结束在代码中设置它 【参考方案1】:

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

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

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

“如果我多次滚动collectionview,它将被修复”

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

无论如何,如果您分享您的collectionView(_:cellForItemAt:),提供解决方案会容易得多

更新:

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

override var bounds: CGRect 
    didSet 
      contentView.frame = bounds
    

请参阅this 线程了解更多信息。

【讨论】:

请添加我的代码摘要检查,如果其他情况,我正在处理,大多数情况下,单元格在第一次初始化时不好,然后在屏幕外,屏幕内后自行修复...

以上是关于UICollectionViewCell 中的自动布局宽度常量无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用自动布局时无法隐藏或删除 UICollectionViewCell 中的视图

iOS7 上 UICollectionViewCell 中的 UIImageView 自动布局问题,但在 iOS8 上没问题

具有自动布局的全屏 UICollectionViewCell

嵌入在 UICollectionViewCell 中的自定尺寸 UITableView

使用SF Symbol作为图像源时,UICollectionViewCell中的UIImageView随机改变帧

UICollectionViewCell 自动布局