【发布时间】:2014-02-05 08:36:49
【问题描述】:
我不断收到“无法同时满足约束”异常(Xcode 5、iOS 7、设备和模拟器),其中列表中的约束之一是这样的:
"<NSLayoutConstraint:0x165b23d0 'UIView-Encapsulated-Layout-Width'
H:[StoryPlayerCell:0x165affc0(0)]>"
我自己没有设置这个约束。它也不是NSAutoresizingMaskLayoutConstraint。
但它来自哪里?我怎样才能摆脱它?
我不知道。
而且我在 Apple 的文档中找不到任何关于 'UIView-Encapsulated-Layout-Width' 的信息。
甚至 Google 搜索也没有返回任何内容。
有什么建议吗?
PS:我在 UICollectionView 中使用此单元格,自定义子类为 UICollectionViewFlowLayout。也许'Encapsulated-Layout' 部分与此有关?
【问题讨论】:
-
你能上传一个复制的示例项目吗?
-
试试CSStickyHeaderFlowLayout 的示例。如果您正常滚动,则不会发生任何事情,但如果您滚动非常慢,则会引发错误。这有点随机且难以复制。
-
@andreamazz 我使用了示例,我认为这些代码导致了 Autolayout 异常。
CGFloat height = MAX(0, -y + maxY);CSStickyHeaderFlowLayout.m 中的第 79 行。如果您对高度使用静态值,例如 200,则不会再发生异常。我无法理解 UIView-Encapsulated-Layout 到底是什么,但似乎动态更改 UICollectionViewLayoutAttributes 框架可能会导致该问题。在示例项目中,它是高度,在 PO 的问题中,我猜是宽度。如果您认为这会有所帮助,也许我可以深入研究一下。 -
使用静态值也会破坏视差效果。虽然使用
CGFloat height = MAX(1, -y + maxY);,用 1 代替 0 可以解决问题,保持正确的视差效果。非常感谢您的帮助,一切顺利。 -
@andreamazz 你认为我可以用它作为答案吗,因为没有人回答?
标签: ios uicollectionview autolayout nslayoutconstraint uicollectionviewlayout