当前位置:首页 > 生活 > 正文

使用masonry布局要不要代码?简单几行代码就能搞定!

使用masonry布局要不要代码?简单几行代码就能搞定!

刚开始做iOS开发那会儿,布局这块简直就是我的噩梦。那时候大家都在用Autolayout,整天跟Constraint打交道,各种冲突、各种莫名其妙的约束失效,搞得我焦头...

刚开始做iOS开发那会儿,布局这块简直就是我的噩梦。那时候大家都在用Autolayout,整天跟Constraint打交道,各种冲突、各种莫名其妙的约束失效,搞得我焦头烂额。

后来听说有个叫Masonry的东西,能用代码写布局,看着那些示例好像挺简洁的,就想着试试看。毕竟对着一堆约束条件在那儿敲来敲去的,还不如直接写代码来得痛快。

我记得我第一次动手用Masonry,就是想把两个View叠一块儿,一个靠左,一个靠右,然后中间留点缝隙。那时候网上的教程还不是很多,我对着官方文档摸索了半天。

开始尝试布局

我把Masonry加到项目里,引入头文件,然后就开始写我的第一个布局代码。想象一下,一个View,我直接对它说:“你给我靠着父视图的左边,离10个点,高度给我固定成100,宽度给我固定成200。”

使用masonry布局要不要代码?简单几行代码就能搞定!

这感觉比AutoLayout直观多了。就是下面这几行核心代码,我到现在都记得清清楚楚:

  • 创建两个View,比如叫leftViewrightView
  • leftView布局:[leftView mas_makeConstraints:^(MASConstraintMaker make) { *(*).*(10); *(*).*(20); *_equalTo(CGSizeMake(100, 100)); }];
  • rightView布局:[rightView mas_makeConstraints:^(MASConstraintMaker make) { *(*).*(-10); *(*_bottom).*(10); *(leftView); *(@100); }];

你瞧,是不是特简单?直接点明了我要它们在哪里,要多大。特别是*(*_bottom).*(10);这一句,直接就说明了rightView的顶部要比leftView的底部低10个点,逻辑清晰得一批。

实际应用中的调整

后来项目复杂起来,我开始做列表布局,那一堆Cell里面的子控件布局,用Masonry简直解放了我的双手。比如一个标题标签,我要它靠左上角,然后下面的内容标签要跟着它,但是要留出图片的位置。

我还是那一套流程:拿到父视图,然后对着里面的每个子控件开始“下命令”。

使用masonry布局要不要代码?简单几行代码就能搞定!

标题titleLabel*.equalTo(superView).offset(15);

内容contentLabel*(titleLabel); *(*_bottom).offset(5); *(superView).offset(-150);

这里我就用到了“小于等于”lessThanOrEqualTo,这在处理动态内容的时候太有用了,保证了布局不会撑破边界。

再比如我要实现一个水平居中的效果,或者让几个按钮等间距排列,Masonry里面都有对应的方便函数。我甚至可以不用写死宽度,直接让它们平均分配剩余空间:*.spaceToSuperView(UIEdgeInsetsZero); 这种写法比AutoLayout里搞一堆比例约束简单多了。

这几行代码一写完,再跑起来,布局就立马到位了。虽然还是得稍微调整一下偏移量(offset),但比起我之前跟AutoLayout死磕的日子,简直是天壤之别。我感觉我从一个布局的“受害者”变成了一个布局的“指挥官”,敲代码写布局,那感觉就是爽。

最新文章