什么是'UIView-Encapsulated-Layout-Width'约束?

我一直在“无法同时满足约束”的例外(Xcode 5,iOS 7,设备和模拟器),列表中的约束之一是这样的:

"<NSLayoutConstraint:0x165b23d0 'UIView-Encapsulated-Layout-Width' H:[StoryPlayerCell:0x165affc0(0)]>" 

我没有自己设置这个约束。 这也不是一个NSAutoresizingMaskLayoutConstraint 。 但是它从哪里来? 我怎样才能摆脱它?

我不知道。 而且在Apple的文档中我找不到有关'UIView-Encapsulated-Layout-Width'的信息。 即使是Googlesearch也没有任何回报。

有什么build议么?

PS:我在UICollectionView中使用UICollectionView的自定义子类中的这个单元格。 也许'Encapsulated-Layout'部分与此有关?

一个快速和不错的解决办法是将999优先值分配给具有高优先级的自定义约束。 封装&自动生成的约束应优先于您的约束优先。

https://stackoverflow.com/a/25795758/590010

我玩了样品,我认为这些代码导致Autolayoutexception。

CGFloat height = MAX(0, -y + maxY); 在CSStickyHeaderFlowLayout.m中的第79行。

如果你使用像200这样的高度的静态值,那么exception就不会再发生了。 我不明白什么是UIView封装布局,但似乎dynamic更改UICollectionViewLayoutAttributes框架可能会导致此问题。 在样本项目中,这是PO的高度,我猜这是宽度。 也许我可以多挖一点,如果你认为这会有所帮助的话

我可以回答这个问题。 在我的OS X应用程序中,我在NSTableView的单元视图(也就是之前在NSTableViewDelegate方法-tableView:viewForTableColumn:row中返回的一个对象)上发现了这样一个神秘的约束。 我也发送了一个setWidth:0.0消息到这个表列。 更改setWidth中的参数:从0.0到其他值反映在神秘约束的常量值中。

结论:使用'UIView-Encapsulated-Layout-Width'或'NSView-Encapsulated-Layout-Width'logging自己的约束是由设置表列的宽度或类似的东西引起的。

我发现这与iOS 10的构build,我正在使用UITableViewCell子类作为正常的意见,而不是表行。 该单元格将contentView限制为零宽度。

我使用的解决方法是将contentView添加到视图层次结构而不是tableview单元格。 我也确保保留tableView单元格(因为它不再被视图层次本身保留)。