UnsatisfiableConstraints

描述:

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的约束被移除了。。

打印一下约束的信息


就是它了。。。

就这样〜〜

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,864评论 4 61
  • 1.尺寸适配1.原因 iOS7中所有导航栏都为半透明,导航栏(height=44)和状态栏(height=20)不...
    LZM轮回阅读 6,374评论 1 4
  • 不玩LLDB,不知道chisel有多强大。chisel之于LLDB,就像iPhone之于手机,前者几乎给后者重新下...
    小笨狼阅读 9,690评论 15 78
  • 最近开始看WWDC的视频,复习了一下AutoLayout的基础内容,写一点儿总结吧,免得看完又忘。 AutoLay...
    姚七六阅读 523评论 1 1
  • 文/袁一笑 王八爷之所以叫八爷是因为在船帮里排行老八。加上了爷字的尊号,那是当上船帮鱼把...
    袁一笑阅读 439评论 2 1

友情链接更多精彩内容