美文网首页Bug调试
快速找到约束有问题的控件2

快速找到约束有问题的控件2

作者: 5a3830ede979 | 来源:发表于2016-07-27 18:03 被阅读6次

上次写了一个控件约束报错,因为上个例子只有一个控件,不具有代表性,所以,这次就找了个控件挺多的例子,这个例子是用第三方库 Masonry,例子截图是这样子的(只是作为例子,所以并不美观,请见谅)


1.png

虽然说排版看起来没有错误,但是,运行的时候还是会有约束错误的,


2.png
为什么会这样呢?因为我代码中是这样写的。

cell中的控件


6.png 3.png

换成效果图就是这样的

4.png

虽然运行结果看起来排版没有问题,但是谁能保证每次都这样呢,所以最好把约束报错解决掉。

怎么解决呢?

1.打开断点导航(cmd+7)
2.点击左下角的+按钮
3.选择Add Symbolic Breakpoint
4.在Symbol添加UIViewAlertForUnsatisfiableConstraints


再次调试的时候就可以通过LLDB来调试了,然并卵,如果你不知道LLDB的话。
所以交给你一个小技巧,添加

po [[UIWindow keyWindow] _autolayoutTrace](OC项目)
//或
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace](Swift项目)。

以上步骤执行完之后,点击运行,因为下了断点,运行以后就是这样

5.png

发现第一次运行没有打印出有用的信息,不要气馁,我们继续运行。

6.png

继续运行结果是这样的


7.png

这两个控件就是比较可疑的,我们可以通过让这两个控件变色来准确找出约束有问题的控件
怎么做呢?只需要在断下的时候在lldb中添加如下命令即可

 expr ((UIView*) 0x7f98c2c39d10).backgroundColor=[UIColor redColor]  ,输入结束回车
// 一定要回车,不然这句话相当于没有执行,控件就不会变色
expr ((UIView*) 0x7f98c2c180c0).backgroundColor=[UIColor redColor],输入结束回车

两次回车后,是这样的

8.png

然后,我们取消断点


1.png

点击继续运行

2.png

结果是这样的


3.png

只要眼神没问题 就知道这是两个 label, 只要写代码的不是太坑,就会有命名规范,我的这里是

contLabel 和 usernameLabel


4.png

找到了,就是这两个label,可以看出途中两个约束有冲突(marginW = 10)用数学公式表达出来就是这么个意思

// 在 contentLabel设置的约束
contentLabel.bottom + 10 = usernameLabel.top ;

// 在 usernameLabel设置的约束
contentLabel.bottom + 20 = usernameLabel.top;

两个约束肯定冲突了,把其中一个删掉就可以了,删掉一个后运行,(记住取消断点),结果是这样的

5.png

好了,约束冲突解决了。。。。

相关文章

网友评论

    本文标题:快速找到约束有问题的控件2

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