我的布局约束在 Interface Builder 中很好,但是由于框架的某些部分应用了我真正不想要的固定高度和宽度约束,因此在运行时发生了异常。它们为什么在那里,以及如何关闭它们?
它们是记录列表中显示的最后两个约束:
2014-04-26 09:02:58.687 BBCNews[32058:60b] 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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0xbf478a0 UIView:0xbf4a3c0.height == 0.28125*UIView:0xbf4a3c0.width>",
"<NSLayoutConstraint:0xbf47190 UIView:0xbf4a3c0.leading == BNMyNewsCell_landscape:0xbf48b10.leading>",
"<NSLayoutConstraint:0xbf47160 UIView:0xbf4a3c0.trailing == BNMyNewsCell_landscape:0xbf48b10.trailing>",
"<NSLayoutConstraint:0xbf47130 BNMyNewsCell_landscape:0xbf48b10.bottom == UIView:0xbf4a3c0.bottom>",
"<NSLayoutConstraint:0xbf47100 UIView:0xbf4a3c0.top == BNMyNewsCell_landscape:0xbf48b10.top>",
"<NSLayoutConstraint:0xd4c3c40 'UIView-Encapsulated-Layout-Width' H:[BNMyNewsCell_landscape:0xbf48b10(304)]>",
"<NSLayoutConstraint:0xd4c38a0 'UIView-Encapsulated-Layout-Height' V:[BNMyNewsCell_landscape:0xbf48b10(290)]>"
}
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xbf478a0 UIView:0xbf4a3c0.height == 0.28125*UIView:0xbf4a3c0.width>
最佳答案
基于大量的观察,我相信(但不能确定)名为 UIView-Encapsulated-Layout-Width
和 UIView-Encapsulated-Layout-Height
的约束是由 UICollectionView
和 friend 创建的,并且存在以强制执行委托(delegate)方法 0x23414313 返回的大小我想它是为了确保 sizeForItemAtIndexPath
设置的 UICollectionViewCell
最终达到它被告知的大小。
这在这里回答了我最初的问题。第二个问题是为什么约束不可满足?单元格的固有高度应该与 cellForItemAtIndexPath
相同。同样,我不确定,但我怀疑这是一个舍入错误(即固有高度达到 200.1 像素,UIView-Encapsulated-Layout-Height
可能四舍五入为 200。我想出的解决方法是降低相关单元格的优先级允许 UIView-Encapsulated-Layout-Height
拥有最后一个字的约束。
关于ios - 自动布局 : What creates constraints named UIView-Encapsulated-Layout-Width & Height?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23308400/