UICollectionViewCell 中的自动布局宽度常量无法正常工作
Posted
技术标签:
【中文标题】UICollectionViewCell 中的自动布局宽度常量无法正常工作【英文标题】:Autolayout Width Constants in UICollectionViewCell doesn't work well 【发布时间】:2016-05-12 07:59:35 【问题描述】:下面是一个uicollectionviewcell,条形宽度必须根据它右边的数字(票数),事件我在控制台中记录它的宽度内容你可以看到它的计算正确,但是在ui上,其中两个似乎没有效果很好,如果我多次滚动collectionview它会被修复,然后它会再次失败,如何在单元格中正确设置视图的约束?
代码太长但我想在这里总结一下 1) 在 viewcontroller 的 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