iOS开发之Masonry调试frame为0

纯代码的童鞋创建控件,设置位置,经常会使用到自动布局框架Masonry,但是有时候在调试发现,frame打印结果:{0,0},{0,0},我们先从以下部分着手

原理:

Masonry本质上是苹果Autolayout的思想
苹果从Xib/StoryBoard图形图像上进行可视化约束,而Masonry则使用代码去执行,两者基本上没有区别

可能造成原因

1>CGRect

父控件创建时候,使用CGRect设置长宽大小,子控件使用Masonry上由于等级有限关系,导致约束失败

2>约束冲突/约束超出边界

打个比方(约束子控件的左边):

make.left.equalTo(self.view.mas_width);

咋一看不报错,但是子控件左边等于父控件的整体长度,位置已经偏离了整个屏幕,当然看不到控件

3>误用equalTo和mas_equalTo

masequalTo 比equalTo多了类型转换操作,一般来说,大多数时候两个方法都是 通用的,但是对于数值元素使用mas_equalTo。对于对象或是多个属性的处理,使用equalTo。特别是多个属性时,必须使用equalTo,例如:

make.left.and.right.equalTo(self.view);
建议,在全局调用文件或者.pch文件里边,添加如下,这样子无论是碰到那种情况,直接用"equalTo"就可以了
// 只要添加了这个宏,就不用带mas_前缀
 #define MAS_SHORTHAND 
// 只要添加了这个宏,equalTo就等价于mas_equalTo
 #define MAS_SHORTHAND_GLOBALS5
 // 这个头文件一定要放在上面两个宏的后面
#import "Masonry.h"
4>iOS10+Xcode8.1 出现的BUG

UI布局都没有问题,但是日志打印的出现{0,0},{0,0},iOS10测试时候发现,在其他低版本的,日志打印正常,估计是Xcode的一个BUG吧.

参考文章链接:
http://www.jianshu.com/p/ad9c075a7547
http://www.jianshu.com/p/10a250cc5018
http://blog.csdn.net/u013089311/article/details/49153131

你可能感兴趣的:(iOS开发之Masonry调试frame为0)