美文网首页项目经验
UnsatisfiableConstraints

UnsatisfiableConstraints

作者: 闻道刘 | 来源:发表于2016-03-21 12:27 被阅读987次

描述:

storyboard上面的约束出错,但拖线的时候不报错。

运行的时候出现提示...UIViewAlertForUnsatisfiableConstraints。

以下两个地址的解决方法很完美。

http://stackoverflow.com/questions/26389273/how-to-trap-on-uiviewalertforunsatisfiableconstraints

http://staxmanade.com/2015/06/debugging-ios-autolayout-issues/

http://nshint.io/blog/2015/08/17/autolayout-breakpoints/

要点:

UIViewAlertForUnsatisfiableConstraints//断点名

po [[UIWindow keyWindow] _autolayoutTrace]//断点动作

expr((UIView*)0x7f88a8cc2050).backgroundColor=[UIColorredColor]//命令查找约束有问题的视图

示范:

首先我们创建一个约束错误的例子,把测试的testView添加上下左右四个约束之后,再多增加一条与父视图居中的约束。

错误约束示范

然后我们运行。发现debug区域有提示:

问题的提示

其实里面已经写清楚了原因以及相应的查找问题的方法。

首先我们创建一个symbolic断点。

断点名就是UIViewAlertForUnsatisfiableConstraints

触发断点的操作就写 po [[UIWindow keyWindow] _autolayoutTrace]

增加symbolic断点 填写断点相关信息

这个设置就是发现约束错误的时候自动打印相关的信息。

因为我这个demo还没有显示出现就已经报错了。。。没有keywindow。。所以显示是nil。。。

我们可以直接暂停。。然后在调试区输入上面的命令,如图:

按下回车之后,相关信息就出来了。。

这个时候我们再结合之前的提示,也就是橙色字里面的这一句,很重要。

很重要的一句提示

表明系统帮你把这个多余的约束移除了。。。约束的相关信息也在上面。。。你再结合刚才po出来的信息,就能很快找到这个view在哪一层。比如,提示中  0x7fc135408a30 这个内存地址,在我们po出来的层级关系里面是最上面的一层,因为我们这个demo最上面的一层就是蓝色的testview。。。所以我们可以快速判断是这个view上面的某个约束出了问题。。如果同层级的view比较多,难以判断,我们可以通过改变view的颜色,直观地看出来是哪个view

约束有问题的view的颜色已经变了

我们还可以通过打印约束相关的信息,快速定位具体是view上面的哪个约束。。。

打印发现是constant为52的约束被移除了。。

打印一下约束的信息 就是它了。。。

就这样〜〜

相关文章

  • UnsatisfiableConstraints

    描述: storyboard上面的约束出错,但拖线的时候不报错。 运行的时候出现提示...UIViewAlertF...

网友评论

  • Zszen:没做任何约束, 但还是抱错了 无奈
    闻道刘:这倒没遇到过,肯定是有什么地方加了,只是你没有发现。
    Zszen:https://www.jianshu.com/p/d32037509dd4
  • 投降又不会赢:作者您好,因为个人英语不太好 看了所有的网址 但是没有在上面找到一个 解释冲突View地址的答案 如果您知道希望您回复一下 谢谢!
    闻道刘:@devChenL 解决了就好,约束出问题确实很烦恼。一起努力!
    投降又不会赢:@看不下去了___ :smiley: 厉害了我的哥 我的问题 解决了 我在xib上弄了一个height的约束 使用masonry update之后 约束冲突 因为之前没有用过masonry 不知道masonry只管理使用masonry 添加的约束 所以在使用update之后 masonry 判断的我更新的不是同一个约束 反而给我添加了一个高度约束 就一直冲突 苦恼了半天 谢谢了!
    闻道刘:@devChenL 我已经更新了文章,里面有详细的示范。你可以看一下,有问题再交流〜

本文标题:UnsatisfiableConstraints

本文链接:https://www.haomeiwen.com/subject/qfuklttx.html