美文网首页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