0

我的 iPad 项目出现自动布局约束错误。当我将设备旋转到横向时,我在 IB 中创建的自定义 UICollectionViewCell 会发生这种情况。问题是没有一个约束是可删除的。我仍在学习自动布局,所以我确信这可能只是添加一些限制并删除一些默认限制的问题,但我被卡住了。我的自定义单元格肯定会发生这种情况-当我删除它并使用普通的旧 UICollectionViewCell 时,我没有收到任何错误。

我四处搜索并尝试将自定义单元格上的 translatesAutoresizingMaskIntoConstraints 设置为 NO,但随后出现以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 -layoutSubviews 后仍需要自动布局。UICollectionView 的 -layoutSubviews 实现需要调用 super.'

在我的自定义单元格的子视图上将其设置为 NO 可以正常工作,但是当我在单元格本身上设置它时,它会出错。

这是我得到的自动布局约束错误 - 这是通常的错误:

以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的;(2) 找到添加了一个或多个不需要的约束的代码并修复它。(注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)

(
"NSAutoresizingMaskLayoutConstraint:0x76bf950 h=-&- v=-&- CMAGalleryCollectionViewCell:0x7687690.height == UICollectionView:0x9161e00.height - 875",

"NSAutoresizingMaskLayoutConstraint:0x76693c0 h=--& v=--& V:[UIView:0x7665470(704)]",

"NSLayoutConstraint:0x7665850 UICollectionView:0x9161e00.bottom == UIView:0x7665470.bottom",

“NSLayoutConstraint:0x7665740 V:|-(0)-[UICollectionView:0x9161e00](名称:'|':UIView:0x7665470)”)

将尝试通过打破约束来恢复 NSLayoutConstraint:0x7665850 UICollectionView:0x9161e00.bottom == UIView:0x7665470.bottom

非常感谢任何帮助或建议。

谢谢!

4

1 回答 1

0

我已经打了很多。当您旋转设备/应用程序时,视图的宽度/高度会更改以适应新的方向屏幕,这通常会破坏“宽度 = 320”类型的约束。

我发现上面的异常是不可读的,直到我读到这个:http: //developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/AutolayoutPG/Articles/formatLanguage.html

...这类似于显示的格式,然后很容易看出问题所在。

您看到的不可删除约束可以更改。您可以将优先级从 1000 降低到可以破坏的东西,或者您可以将它们替换为有效的东西。一种(不完美的)方法可能是制定规则 >= 320 以便横向拉伸,或者您可以添加自己的约束来提供(也许将视图绑定到它的超级视图,然后宽度约束应该是可删除的。)说,这不是一个好的解决方案。

我建议您通常尝试在可能对主视图的形状/大小做出反应的东西(例如大型集合视图)上删除宽度和高度限制,因为这些宽度/高度通常是错误的 50%的方向。

综上所述,这是说单元格高度是集合高度减去 875 吗?

CMAGalleryCollectionViewCell:0x7687690.height == UICollectionView:0x9161e00.height - 875",

这个单元格是集合视图的子视图,而不是单元格的模板吗?我也遇到了界面构建器和集合的问题。我不得不在 IB 中从头开始重建集合视图,以免添加虚假的子单元格。

于 2013-02-01T16:47:37.027 回答