更加优雅的iOS自动布局

96
彩虹的洪
2017.12.18 16:49 字数 482

    因为懒,所以之前几乎不用代码进行自动布局。但是使用xib和storyboard,总是有那么一些局限性。使用代码布局在某些时候就成了必须了😂  。

    iOS原生的布局方式太过麻烦。要么使用VFL(Visual Format Language),要么就是一条约束一行代码,虽然在iOS9之后使用NSLayoutAnchor会方便点。但在这个三天两头改需求的时代,严重浪费自己的时间啊!主流的几个自动布局库SnapKitCartography...总觉得还是有点不方便。那就只能靠自己了。

要求

    当初开始构思怎么样才可以比较方便的布局时。最原始的要求有两点:1、可以像SnapKit的链式调用,这样可以一行代码添加多个约束。2、使用Swift的运算符重载。

就像:

view1.left.top == view2.left.top

view1.width.height == [100, 200]

然后有些组合的属性方便使用,比如:

view1.center == superView.center

实现

    依据以上的需求,自己就写了Bees。为了防止命名空间的冲突,就像RxSwift一样给属性加了前缀。所以最后使用起来是这样的:

view1.bee.size == CGSize(width: 111, height: 111)

view1.bee.center == superView.bee.center

view2.bee.edge == UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

view3.bee.right.bottom == superView.bee.right.bottom - 10

    有些约束根据代码逻辑要进行修改,就用以下方法取得约束数组。

let constraints = view1.bee.left.top == view2.bee.left.top

    当然对于UILayoutGuide的支持也是必不可少的,使用起来和UIView是一样的。

view.bee.bottom == layoutGuide.bee.bottom

完整的使用文档在:使用指南

Github地址:https://github.com/hongcaiyu/Bees

iOS
Web note ad 1