iOS定位处理约束冲突

前言

在做项目的时候,无意间看到自动布局约束警告,开始也也觉得没什么,虽然有警告,但并不影响UI展示效果。但是越来越有代码洁癖的我,也忍受不了控制台输出一大堆约束警告Log,于是就查阅如何定位解决约束冲突,同时自己也记录下来。下面开始介绍具体操作步骤吧。

一、添加UIViewAlertForUnsatisfiableConstraints断点

  • 添加Symbolic Breakpoints
    屏幕快照 2018-06-04 下午2.44.35.png
  • 编辑断点symbol填入
UIViewAlertForUnsatisfiableConstraints
  • 添加控制台打印action
po [[UIWindow keyWindow] _autolayoutTrace]
屏幕快照 2018-06-04 下午2.44.50.png

二、定位约束警告冲突

  • 添加好断点之后,当界面有约束冲突,就会触发断点,控制打印如下:
[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?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,038评论 3 119
  • 年轻人千万不能碰的东西 1 知乎上有人问年轻人有哪些千万不能碰的东西,翻了网友的回答,基本上确定了赌和毒是最为常见...
    生达成长规划阅读 4,348评论 0 4
  • 第一次去新疆是14年的五一,只有三天假,前后各翘了两天,凑够七天,就去了。记忆里,那个春天好像天气自始至终都没有好...
    跑反阅读 4,377评论 0 1
  • 刚刚结束了一段工作关系,为期一个月。 相处不久的同事说,我好舍不得你走。人是感情动物,一个月时间不长,但也不短。足...
    长耳朵的兔兔兔纸阅读 4,481评论 0 0