开源项目Masonry旨在让自动布局(Auto Layout)的代码更简洁、可读性更强。
Masonry ,“一个轻量级的布局框架,采用更优雅的语法封装自动布局”,不需要使用XIB和Storyboard。它的创造者Jonas Budelmann 论证 了尽管自动布局很强大,但它很快就变得冗长而不可读。
Masonry是一种领域特定语言(DSL),为自动布局的所有功能提供便捷的方法,包括建立和修改约束、存取属性、设置优先级以及调试支持。
GitHub上的示例代码展示了Masonry的 典型用法及其简洁的语法 。
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
自动布局最重要的是 约束 :UI元素间关系的数学表达式。约束包括尺寸、由优先级和阈值管理的相对位置。它们是 添加剂 ,可能导致约束 冲突 、约束不足造成 布局无法确定 。这两种情况都会产生异常。
通过编程的方式,不使用Masonry,也可以创建约束:创建 NSLayoutConstraint ,关联到视图并指定属性和关系。Apple也提供了 Visual Format Language ,它是另一种以文本方式描述关系的领域特定语言。
自动布局既不是强制的,也不是独有的方法。“springs and struts”仍然是一种有效的方法。“springs and struts”也就是 autoresizing masks ,决定了一个视图的父视图大小变化时,其自身如何变化。
Apple提供了 采用自动布局的令人信服的原因 :
- “Springs and struts”模式需要编写代码来处理各种屏幕方向、尺寸和动态内容。
- iOS 7中的动态类型允许用户在应用中设置文字大小偏好。
- 支持iOS 6和iOS 7以及它们不同的元素度量。
自动布局并非完美无缺。Apple提供了一篇 指南 ,以常用的UIScrollView为例说明如何使用自动布局。Matt Newburg在一篇回复中给出了充足的理由说明为什么 “自动布局在视图转换时并不完美” 。为了弥补这种不足,他建议更多地使用层转换。
任何类型的自动布局代码意味着你将无法获得Xcode5提供的Interface Builder增强功能的支持。特别是可视化地解决自动布局问题的功能,在assistant editor的预览模式中查看各种屏幕方向、尺寸和iOS系统版本下的运行时布局的功能。
原文英文链接: iOS Auto Layout with Masonry
Masonry,其实是简化了iOS中的autolayout中代码实现自动布局。
附上地址:Github
总结的经验就是:
知道控件两两之间的关系:equalTo lessThanOrEqualTo 还是greaterThanOrEqualTo
对于控件的属性:如图所示
了解了这些,布局就不是问题了,下源码下来自己写一遍就会了。切勿眼高手低即可。