分享 UIView 的 AutoLayout Category ,简化了我 80% 以上的 AutoLayout 代码

2015-06-02 19:16:02 +08:00
 banxi1988

RT:
对于SnapKit 中示例代码,使用我的封装,更简单,如下:

let box = UIView()
 superview.addSubview(box)
 box.pinEdge(UIEdgeInsetsMake(20,20,20,20))

不过我跟SnapKit 的定位不一样, 它尝试重新定义一种声明约束的方式,并适应所有场景.
而我目的是,简化 80% 的写法. 其他的使用构建原生的 NSLayoutConstraint 的方式

下面是一些用法举例:

let box = UIView()
box.pinCenterX() // 在父 View 水平居中
box.pinCenterY() // 在父 View 中垂直居中

let box2 = UIView()
box2.pinCenterXToSibling(box1) // 与 box 水平居中对齐

按我平常手写约束的经验来说, 简化 80% 的手写约束,是不为过的
另: 如果某一类的约束,使用比较多,也可以快速的添加一个 convenience 方法.

PS: 在写这些封装方法时,我发现起名字,其实是个大问题. 不想太啰嗦,又想直观.
部分参考了 SnapKit, PureLayout的写法

So, how do you think?

源代码:

https://gist.github.com/banxi1988/8b07212cadaddd28384f

3217 次点击
所在节点    iDev
8 条回复
Pixel
2015-06-02 19:35:06 +08:00
好像很强大
Elethom
2015-06-02 19:59:32 +08:00
Masonry.
isaced
2015-06-02 20:30:21 +08:00
为什么要用 gist ?建个仓库多好。
bengol
2015-06-02 20:41:30 +08:00
刚开始用purelayout
banxi1988
2015-06-02 20:59:47 +08:00
@Elethom SnapKit 算是 Masonry 的 Swift 版本.

@isaced 这个一个文件的源代码,还是先以 gist 发布比较好.


@Pixel 这个倒是不强大, 只是简单的封装了而已

@bengol PureLayout 我也了解过. PureLayout 更完善些.
likid
2015-06-02 22:21:28 +08:00
看起来和 Android 的 layout 的命名有点类似。
小团队,2个人左右,全面使用 Xib 和 Storyboard
banxi1988
2015-06-02 23:08:48 +08:00
@likid 我也是主要使用 Xib 加 Storyboard, 但是有时,使用代码方式,感觉更好点.
另: 一直也做 Android 开发, 所以命名也受了点影响.
特别是 below,和above ,padding, margin 等就是受 Android 及 CSS 的影响.
likid
2015-06-03 00:04:57 +08:00
@banxi1988
最近在学 Android 开发,看起来比较像,共同学习。

当然,有时候是用代码好点。然而如果不熟悉的话,使用了一些封装好的易用的 API,反而不懂得如果灵活的使用代码。所以我在自己的团队中更倾向于需要代码的,一定是极少的,而且尽量手写,不加入其他第三方。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/195604

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX