背景
开发iOS原生app的时候不可避免有些场景需要手写UI,鉴于之前使用系统或者开源的布局框架影响到开发效率,所以抽空实现了一个简单的布局引擎BLSmartLayoutEngine.
BLSmartLayoutEngine主要解决UI布局两个痛点:
1:系统布局或者开源框架诸如autoresizing,auto-layout,Masonry等手工写起来相对比较繁琐开发效率低,并且Size Class有系统版本依赖,8.0以上的版本才能使用。
2:当后续版本迭代需要修改原来的UI布局时,这些框架显得非常不方便,反而加大了维护成本
简介
BLSmartLayoutEngine很好的解决了前面两个问题,手写UI布局易读懂并且很容易上手,可以很大程度上提高开发效率。
原本还想实现一个动态创建功能,UI布局从xml里面配置,BLSmartLayoutEngine负责读取和解析xml进行view的创建以及布局,没有像xib或者storyboard那么复杂。考虑到引入动态创建虽然提高了开发效率,但会导致这个布局引擎太重所以暂时没有实现。
BLSmartLayoutEngine并不能覆盖到所有的UI布局场景,特别是那些需要在布局过程做特殊动画的场景,如果考虑到很多的细节场景做支持,那么整个框架会变得很臃肿。BLSmartLayoutEngine目前能覆盖到大部分的静态布局场景,其它不适用的特殊场景还是需要自己实现。
特性
BLSmartLayoutEngine特性如下:
1:轻量级
主要类只有两个:UIView(BLSmartLayoutEngine)以及BLSmartLayout,前者实现了对UIView属性的扩展以实现从UIView层直接支持本布局引擎,BLSmartLayout主要是声明了布局接口
2:简单
如果要实现5个按钮等分等间距水平(横向)布局,使用手写代码或者autoresizing会比较繁琐,使用BLSmartLayoutEngine只需要两行代码即可实现,而且不需要重写UIView的layoutSubviews函数,直接在init里面设置即可,只需要关注扩展的layoutType,width,height属性,其它属性如不需要定制可不使用
3:兼容性
BLSmartLayoutEngine支持与其它布局方式共存,这里共存的意思是对于某些UI可以使用BLSmartLayoutEngine,如果不想使用则自己采用其它布局方式
BLSmartLayoutEngine从UIView层支持,新的UI直接使用此布局引擎即可,不影响原有的布局
4:扩展性
当前支持的布局类型有:HBox,VBox,Anchor,BLSmartLayoutEngine支持使用者扩展布局,例如有瀑布流等其他自定义的布局方式,只需要继承BLSmartLayout然后重新实现布局方法进行相应的自定义布局,之后将布局方式和类型进行注册即可
5:ARC/MRC支持
BLSmartLayoutEngine 采用ARC编 译,MRC/ARC编译的工程在使用时按照相应的内存管理方式即可