前面写了一篇文章,介绍FlexLib这个布局库,见IOS新一代界面开发利器 —— FlexLib。然后有很多网友问相比于Masonry有什么优势,今天就简单对比一下两者优劣。

Masonry是一个非常优秀的开源库,可以说是Masonry的出现拯救了Autolayout,其简洁的语法赢得了大量美誉。但是随着众多基于Flexbox布局库的出现(如React Native、Weex、Texture),autolayout本身越来越显得难以适应时代的需要。下面从几个方面简单分析一下:

Autolayout性能问题

Frame / Auto Layout / FlexBox 的性能对比如下:

详细的Autolayout评测见这篇文章:从 Auto Layout 的布局算法谈性能

总体而言,当页面中的窗口数量达到30个以上的时候,布局所需要的时间即可达到16ms,也就是当视图比较多的时候,autolayout会有严重的性能问题。而使用flexbox模型,其布局性能非常接近于使用frame方式布局。

Masonry仅支持布局属性的设置

对于一个页面而言,除了需要设置控件的布局属性,还需要设置控件的视图属性,包括背景色、字号、文字等。而这些都用代码来设置将直接导致代码冗长,可读性差,不容易修改等。

使用Masonry写的代码

[self.textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).mas_offset(7);
make.bottom.mas_equalTo(self).mas_offset(-7);
make.left.mas_equalTo(self.voiceButton.mas_right).mas_offset(4);
make.right.mas_equalTo(self.emojiButton.mas_left).mas_offset(-4);
make.height.mas_equalTo(HEIGHT_CHATBAR_TEXTVIEW);
}];
self.textView.font = [UIFont systemFontOfSize:16];
self.textView.color = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.6];
self.textView.text = @"测试文本";

FlexLib通过xml配置文件

<UITextView name="_textView" layout="top:7,bottom:7,left:4,right:4" attr="fontSize:14,color:#333333,text:测试文本"/>

可以看出,通过xml配置起来优势相当明显

每次界面的改动都需要重新编译运行

因为整个布局都使用代码来编写,只要设计有一点点改动,都需要修改代码、编译、重新运行,这对于小项目还可以接受,而对稍大一些的项目所花费的时间则难以想象。

使用xml配置则可以运行时修改xml布局,然后即时刷新界面,如图:

适配iPhone X的代价

iPhoneX一出,让使用autolayout以及masonry的每个界面都需要进行适配,其工作量相当之大。

对比之下,使用FlexLib则无需额外对iPhoneX进行适配,另外如果框架提供的safeArea不能满足需求,也可以非常方便的通过重载进行适配。

使用FlexLib适配iPhoneX的效果图

除了以上几点以外,FlexLib还有其他特性,包括输入框自动躲避键盘、支持预定义风格、国际化支持、tablecell高度自动计算等。

因此,您是否还打算继续使用Masonry呢?

是时候放弃Masonry了相关推荐

  1. java cms 垃圾回收_Java 9 或将放弃 CMS(并发标记清除垃圾收集器)

    原标题:Java 9 或将放弃 CMS(并发标记清除垃圾收集器) 近日,JEP 291 再次被 Java 开发团队提上日程.先来看看该 JEP. JEP 291: Deprecate the Conc ...

  2. iOS 自动布局框架 – Masonry 详解

    来源:伯乐在线 - 刘小壮 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了 ...

  3. 当你累了,准备放弃时,看看这个吧!!!

    当你累了,准备放弃时,看看这个吧!!! 在朋友空间看到这篇文章,送给所有还在坚持的朋友~~ 每个人都背负着一个沉重的十字架,在缓慢而艰难地朝着目的地前进. 途中,有一个人忽然停了下来. 他心想:这个十 ...

  4. 初级开发人员的缺点_这是我想放弃初级开发人员时所做的事情

    初级开发人员的缺点 Coding is hard. Really hard. There are times when you'll think "this is amazing! I lo ...

  5. Google排名第一的技术,引数十万人关注!网友:差点我就放弃了!

    毋庸置疑,Python越来越被认可为程序员新时代的风口语言.无论是刚入门的程序员,还是年薪百万的 BATJ 的大牛都无可否认:Python的应用能力是成为一名码农大神的必要项. 所以,很多程序员把Py ...

  6. AI一分钟 | 程维成立滴滴股权投资公司;特斯拉董事会决定放弃私有化

    ▌滴滴 CEO 程维成立滴滴股权投资公司,出任总经理 8 月 27 日午间消息,滴滴 CEO 程维近日出资成立滴滴(厦门)股权投资有限公司,主营股权投资以及相关咨询服务.工商资料显示,滴滴(厦门)股权 ...

  7. AI从入门到放弃2:CNN的导火索,用MLP做图像分类识别?

    来源 | 腾讯知乎专栏 作者 | AIoys(腾讯员工,后台工程师) 项目文档和代码在此:github项目地址: https://github.com/zsysuper/AI_Notes ▌一.前言 ...

  8. 一分钟AI | Numpy将放弃Python2.7全面支持Python3,柯洁苦战终结AI41连胜深夜失眠发文感慨

    一分钟AI 柯洁深夜发微博,庆祝自己击败已经41连胜的新锐围棋AI"符合预期" <时代>杂志评选 2017 年最佳发明榜单发布:iPhone X,特斯拉Model 3, ...

  9. 终于放弃了Maven,我选择用Gradle!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者 :乐百川 本文来源:toutiao.com/i682 ...

最新文章

  1. Android布局优化之include、merge、ViewStub
  2. https://www.exploit-db.com/下载POC比较完善的代码
  3. MySQL — 外键关联操作
  4. oracle使用打开数据库文件,Oracle技术网—某个数据文件损坏,如何打开数据库
  5. jpa连接mysql报错_Spring boot jpa mysql 连接数据库SSL错误
  6. 48、多用块枚举,少用for循环
  7. [html] 说说base标签有什么作用?
  8. iOS - Core Animation 核心动画
  9. 作者:牛海波,男,中国国防科技信息中心工程师。
  10. Java并发(六)——CAS、AQS、Lock、通信工具类
  11. [leetcode]241. 为运算表达式设计优先级
  12. C++公有、私有、保护继承的关系
  13. 连接共享打印机0xc00000bcb
  14. php对接抖音快手小红书短视频去水印接口的代码
  15. ORACLE和SQL SERVER数据交换的二进制问题
  16. 虚拟机操作工具--Xmanager5 下载/安装/使用
  17. kbhit(), bioskey(), system(pause)
  18. html引入第三方库,基于webpack实现多html页面开发框架七 引入第三方库如jquery
  19. 测试两个主机之间的连通性_网络连通性测试工具—PING
  20. html 下拉框高度,如何自定义设置select下拉框高度的优化方法

热门文章

  1. 打印出所有“水仙花数”
  2. vue e2e 测试
  3. 组合数学 —— 斯特林数(Stirling)
  4. 马云清华毕业典礼演讲:30年来我只坚持三件事
  5. C语言中的string.h头文件
  6. 【C语言】快速排序函数qsort()
  7. gitlab与Jenkins
  8. Pix4D航测软件简介
  9. Win10平台训练Yolo-Fastest模型全流程
  10. 生物探针技术与使用现状