集合视图中的自动布局 ImageView 高度锚冲突且无法正常工作
Posted
技术标签:
【中文标题】集合视图中的自动布局 ImageView 高度锚冲突且无法正常工作【英文标题】:Auto Layout ImageView Height Anchor conflicting in Collection View and not working properly 【发布时间】:2019-06-28 16:43:50 【问题描述】:我遇到了这个问题,我在集合视图单元格中有这个图像视图,在 cellForRow
配置函数中,我正在设置图像视图的高度锚点,具体取决于模型对象是否包含图像。如果它包含图像,则高度为 200,否则为 1。现在我收到此错误。
该错误最初似乎修复了约束,当第一次加载集合视图时,我能够正确查看单元格。只有在我重新加载collectionview 时,我才遇到单元格不显示imageview 的问题,或者更确切地说,imageview 的高度是1,它应该是200。所以'1' 高度锚的优先级高于200 一个。
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x600001643d40 UIView:0x7fd7fdea2ac0.height == 200 (active)>",
"<NSLayoutConstraint:0x60000165eb70 UIView:0x7fd7fdea2ac0.height == 1 (active)>"
)
我已经更改了优先级,但这似乎也不起作用:
if post.postMedia.isEmpty
cell.postMedia.heightAnchor.constraint(equalToConstant: 1).isActive = true
cell.postMedia.heightAnchor.constraint(equalToConstant: 1).priority = UILayoutPriority(rawValue: 999)
else
cell.postMedia.heightAnchor.constraint(equalToConstant: 200).isActive = true
cell.postMedia.heightAnchor.constraint(equalToConstant: 200).priority = UILayoutPriority(rawValue: 1000)
postMedia is the array that contains images. If it is empty the height anchor is 1 and priority is set to 999. and 200 one is given 1000. But that still doesn't work. Is there anything else I can do when two constraints are conflicting one another?
我们将不胜感激。
【问题讨论】:
我认为每次加载单元格时都会添加新的约束。单元格被重复使用,因此您会获得图像高度的多个碰撞约束。您应该在单元格中保留对高度约束的引用,并在加载单元格时更新其常量。您可以将属性设为可选var heightConstraint: NSLayoutContraint?
,如果在加载单元格时为nil
,则创建一个,否则只需更新heightConstraint.constant = 200
(或1
)。
【参考方案1】:
我认为每次加载单元格时都会添加新的约束。单元格被重复使用,因此您会获得图像高度的多个碰撞约束。您应该在单元格中保留对高度约束的引用,并在加载单元格时更新其常量。
您可以将属性设为可选:
var heightConstraint: NSLayoutContraint?
如果加载单元格时为nil
,则创建一个,否则只需更新heightConstraint.constant = 200
(或1
)。
let height: CGFloat = post.postMedia.isEmpty ? 1 : 200
if cell.heightConstraint == nil
cell.heightConstraint = cell.postMedia.heightAnchor.constraint(equalToConstant: height)
cell.heightConstraint?.isActive = true
else
cell.heightConstraint.constant = height
【讨论】:
以上是关于集合视图中的自动布局 ImageView 高度锚冲突且无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
表格视图单元格中的 ImageView 切断标签(自动布局)[关闭]