ios 6自动布局约束错误

时间:2013-01-25 21:18:32

标签: ios objective-c ipad ios6 autolayout

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

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

  

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

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

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

  

以下列表中的至少一个约束可能是您不想要的约束。试试这个:(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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我经常打这个。当您旋转设备/应用程序时,视图的宽度/高度会更改以适应新的方向屏幕,并且通常会破坏“width = 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中从头开始重建集合视图,而不是添加伪造的子单元格。