我正在尝试调试+了解自动布局约束,我注意到在使用xcode调试视图时(使用酷层事物)我注意到在视图中的一个元素上,约束看起来像这样
并且视图确实忽略了这些约束。
所有约束具有相同的优先级(1000),因为我想要它们。所有约束都是使用接口构建器而不是通过代码进行的,并且IB中没有警告或冲突。
但在运行时我确实看到了这个
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:0x79684f10 V:[UIImageView:0x79686800(>=160)]>",
"<NSLayoutConstraint:0x7968a310 V:[UIImageView:0x79686800]-(130.5)-| (Names: '|':UIView:0x79686790 )>",
"<NSLayoutConstraint:0x7968a340 V:|-(0)-[UIImageView:0x79686800] (Names: '|':UIView:0x79686790 )>",
"<NSLayoutConstraint:0x796997b0 'UIView-Encapsulated-Layout-Height' V:[CoverCell:0x79686570(192)]>",
"<NSAutoresizingMaskLayoutConstraint:0x7969cd30 h=-&- v=-&- UIView:0x79686790.height == CoverCell:0x79686570.height>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x79684f10 V:[UIImageView:0x79686800(>=160)]>
所以我从中了解到一些规则存在冲突,但我不确定如何阅读
>=160
是UIImageView的规则,所以它的高度至少为160,而130.5是imageview的底部填充(因此当使用systemLayoutSizeFittingSize:UILayoutFittingCompressedSize
时,高度不会为0所以整个细胞的最小高度是160 + 130.5)
我不明白的其他错误。
约束有什么问题?为什么约束冲突在运行时而不是在IB中发生?
答案 0 :(得分:6)
XCode 6现在支持不同的布局。 Compact Width |中存在这种灰色约束例如,任何高度布局,但您当前正在编辑任意宽度|任何高度。
答案 1 :(得分:1)
这取决于。如果你不使用大小类,灰色的是删除的。你需要第二次删除它们。无论听起来多么愚蠢。
如果使用大小类,则表示当前大小类与灰色约束不同。 (但第一种情况也是可能的......)
在你的情况下,这似乎是第一种情况。您需要再次删除灰色约束。