集合视图单元格中的多行标签在重用后中断
Posted
技术标签:
【中文标题】集合视图单元格中的多行标签在重用后中断【英文标题】:Multiline label in collection view cell breaks after reuse 【发布时间】:2017-04-07 11:53:34 【问题描述】:我有一个自定义 UICollectionViewCell,其中包含多个 UI 元素,使用代码中的 AutoLayout 设置进行布局。
在更大的设备(iPhone 6 及更高版本)上一切正常。
然而,在较小的设备上,多行 UILabel 会中断,但仅(似乎)在重用后才会中断。
在初始显示时,第一个单元格如下所示:
在单元格被滚动出屏幕并再次打开后,它看起来像这样:
这些是标签上设置的约束:
descriptionLabel.centerXAnchor.constraint(equalTo: firstButton.centerXAnchor),
descriptionLabel.leadingAnchor.constraint(equalTo: otherLabel.leadingAnchor),
descriptionLabel.topAnchor.constraint(equalTo: firstButton.bottomAnchor, constant: 15),
secondButton.topAnchor.constraint(greaterThanOrEqualTo: descriptionLabel.bottomAnchor, constant: 20),
我觉得这与 greaterThanOrEqualTo
约束有关,但如果我用一个普通的旧 equalTo
约束替换它,布局就会变得疯狂,标签会缩小到只适合一行。
【问题讨论】:
【参考方案1】:我在UICollectionView
中遇到过类似的问题,我在preferredMaxLayoutWidth
属性和widthAnchor
中找到了解决方案
productNameLabel.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 0.6)
productNameLabel.preferredMaxLayoutWidth = self.frame.size.width * 0.6
它应该可以解决问题。
【讨论】:
leading
和 centreX
应该注意宽度,但我会看看 preferredMaxLayoutWidth
。
我不确定leading
和centerX
是否应该关心宽度。这意味着将标签固定在左侧或右侧并在 X 轴上居中。因此,如果我正确理解约束,它可能会产生一些冲突。我建议使用leading
并设置width
但是我的UICollectionViewCells
在重用时遇到了同样的问题,这解决了问题:)
preferredMaxLayoutWidth
似乎解决了我的问题 - 谢谢!我可以确认leading
和centreX
适用于水平位置和宽度。前导约束给视图它的 x 位置,并且视图知道它需要将它的中间与另一个视图的中间对齐,因此相应地调整它的宽度 (Y)以上是关于集合视图单元格中的多行标签在重用后中断的主要内容,如果未能解决你的问题,请参考以下文章