iOS定位处理约束冲突

一、添加UIViewAlertForUnsatisfiableConstraints断点

  • 添加Symbolic Breakpoints
    屏幕快照 2018-06-04 下午2.44.35.png
  • 编辑断点symbol填入

    1
    UIViewAlertForUnsatisfiableConstraints
  • 添加控制台打印action

    1
    po [[UIWindow keyWindow] _autolayoutTrace]

屏幕快照 2018-06-04 下午2.44.50.png

二、定位约束警告冲突

  • 添加好断点之后,当界面有约束冲突,就会触发断点,控制打印如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want.
    Try this:
    (1) look at each constraint and try to figure out which you don't expect;
    (2) find the code that added the unwanted constraint or constraints and fix it.
    (
    <MASLayoutConstraint:0x604000ab04a0 UIButton:0x7faf99f04010.width == 40>,
    <MASLayoutConstraint:0x604000ab66e0 UIButton:0x7faf99f04010.left == CYBButtonView:0x7faf99f83360.left + 10>,
    <MASLayoutConstraint:0x604000abaa00 UILabel:0x7faf99f5f8e0.left == UIButton:0x7faf99f04010.right>,
    <MASLayoutConstraint:0x604000abd580 UILabel:0x7faf99f5f8e0.left == CYBButtonView:0x7faf99f83360.left + 15>,
    )

    Will attempt to recover by breaking constraint
    <MASLayoutConstraint:0x604000ab04a0 UIButton:0x7faf99f04010.width == 40>

    Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
  • 根据提示,找到约束有问题的控件地址0x7faf99f04010,然后全局搜索,就能找到具体是哪个控件

  • 如果控制台打印不够直观看出是哪个控件约束有问题,我们可以通过 LLDB命令工具chisel定位寻找。

三、解决冲突

通常解决冲突的方法有:

  • 删除多余约束
  • 修改约束优先级

参考

1、How to trap on UIViewAlertForUnsatisfiableConstraints?

-------------本文结束感谢您的阅读-------------
分享到:
0%