约束报错、冲突如何定位UI

问题

在使用AutoLayout 或者masonry 布局UI的时候,经常会遇到约束冲突的警告。
例如:图中,我们知道是一个Button的约束冲突了,但是不能很直接的让人知道是哪个Button。

约束报错、冲突如何定位UI_第1张图片

lldb

要是能知道这个Button UIButton:0x12c7f6f30的title是什么,那么我们不就可以在代码中直接搜索该title,定位到代码中的Button?

约束报错、冲突如何定位UI_第2张图片

(lldb) po 0x12c7f6f30
<UIButton: 0x12c7f6f30; frame = (371 0; 33 39.6667); opaque = NO; layer = 0x12c7f6b30>>

(lldb) po ((UIButton *)0x12c7f6f30)
<UIButton: 0x12c7f6f30; frame = (371 0; 33 39.6667); opaque = NO; layer = 0x12c7f6b30>>

(lldb) po ((UIButton *)0x12c7f6f30).titleLabel.text
 nil
(lldb) 

为什么是空?

可能是button没有设置title,而仅仅设置了button的image!那么接下来思路就是:能不能找到这张图片是什么图片?

UIImageView 如何定位图片名字或者预览其内容?

调用UIView的recursiveDescription方法,打印一下button的层级关系!

这里写图片描述

(lldb) po [((UIButton *)0x12c7f6f30) recursiveDescription]
<UIButton: 0x12c7f6f30; frame = (371 0; 33 39.6667); opaque = NO; layer = 0x12c7f6b30>>
   | <UIImageView: 0x12d9087b0; frame = (9.33333 12.6667; 14 14); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = 0x12c7f6cd0>>
   | 0x12c6e6340; frame = (0 0; 0 0); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x12d85faf0>>

查看了一下UIImageView的头文件实在无法找到获取UIImageView图片名字的属性或者方法,怎么办?

LLDB技巧:chisel

上网搜索了一下,在lldb中通过chisel能够预览到image的图片内容!

这里写图片描述

(lldb) po 0x12d9087b0
<UIImageView: 0x12d9087b0; frame = (9.33333 12.6667; 14 14); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = 0x12c7f6cd0>>

(lldb) visualize 0x12d9087b0
2016-07-15 18:21:18.240 BMBlueMoonAngel[674:220643] XPC connection interrupted

预览效果:

约束报错、冲突如何定位UI_第3张图片

你可能感兴趣的:(iOS学习笔记)