在某一个月黑风高的夜里,他正在伏案敲代码,敲完之后一脸自信的cmd + run,结果不愉快的事情就此发生了,心塞。。😂
事情是这样的,我们美丽的UI设计了一套图,本来想自定义个flowLayout走个捷径的,事实却发现走了个大弯路,图是下面这样子的👇
约束报错,很是无奈,于是我又到GitHub上查看了一遍masonry的使用方式,现总一下。
iOS布局有这么几种方式:
frame:你要看吗?我并不打算写
autoResize:autoresizingMask是view的一个布局属性,默认值是UIViewAutoresizingNone,这个枚举值有很多值,具体自己查看
autoLayout:自动布局出来以后,很受欢迎,为此苹果还设计了VFL可视化语言,但是程序员是很懒的(不是说不会偷懒的程序员不是好程序员吗,所以我说程序员懒并不是贬义词),然后masonry就诞生了,masonry是一个对NSLayoutConstraint的封装具备链式语法的三方布局库,很受大家欢迎,我不敢说没人用frame布局,但是我敢说没几个人还在用NSLayoutConstraint来布局了吧
masonry的具体用法就不说了,GitHub上有详细的用法,下面就提一下masonry一些你值得注意的地方。
- masrony 提供的一个利于debug约束问题的方法,代码摘自masonry的demo上的,我加了注释
|
|
上面的约束有问题,会抛出问题,如果不给视图和约束设置key的话,xcode提示错误如下:
给视图和约束添加了key之后的提示如下:
是不是看着爽多了。。
这样你就能看到具体是哪个view的哪个约束可能出现问题了,而不是出现一堆的十六进制地址
2.添加或者更新(update、remake)约束的代码应该放在哪,代码如下一看便知
|
|
3.autoLayout不允许对其属性例如左、右、centerY等被设置为常量,因此如果你要给这些属性传递一个NSNumber类型的值得时候masonry会将他们转换成与父视图相关的约束。
|
|
view的左边距等价于 view.left = view.superview.left + 10
4.按比例布局,如果各占一半的话,也可以不用multipliedBy,直接约束两个视图的width isEqual就行了
|
|
5.你用NSAutoLyoutConstraints布局的时候需要设置视图的view1.translatesAutoresizingMaskIntoConstraints = NO
,默认值是YES,等于YES的时候autoresize会影响autolayout布局,有时会发现效果不是自己想要的,不过如果你用masonry设置约束的时候,masonry会帮你把这个属性值设置为NO,你不用管它,写出来就是想提醒你。
6.看完官方的demo,发现他们会把需要的每个约束都写上,但是有时候不需要全写上,如下面被我注释的代码,但是官方是没有注释的,既然人家官方都这样写,你是不是也应该这样写啊,别注释了,这样不容易出错,如下:
|
|
要注意blueView设置高度依赖的时候设置的是一个数组这样的用法
7.masonry动画
|
|