Autolayout in Code
使用代码自动布局,需求还是有的,虽然很习惯了 IB 来做。参看 Programming iOS 9。
一共三个方法:
- Anchor notation
- Creating constraints in code
- Visual format notation
1. Anchor notation
感觉 anchor 一个折中的方案,语法比 constraints 简洁,符合 IB 设计和添加约束的思路。美中不足是仅支持 iOS 9。
The NSLayoutAnchor class is a factory class for creating NSLayoutConstraint objects using a fluent API. Use these constraints to programatically define your layout using Auto Layout.
具体的使用语法都很简单,贴一个书中的 Demo:
1 | let v1 = UIView(frame: CGRectMake(100, 111, 132, 194)) |
2. Creating constraints in code
兼容 iOS 8 以下的,但是超级啰嗦。
- iOS 6 可以全部使用最外面的视图添加约束,下面 Demo 中的:container.addConstraint(s) / removeConstraints
- iOS 8 直接使用:NSLayoutConstraint.activateConstraints / deactivateConstraints
1 |
|
3. Visual format notation
这个语法支持 iOS 6,而且语法最为简洁直观。也是
Programming iOS 9 书中推荐的方案。实际项目尝试了上面两种两种方法后,想要更短的代码量的话,还是 Visual format notation 最为合适。这里也推荐大家,还很容易理解其语法,而且 console debugging 也会优先显示该语法。
1 | <NSLayoutConstraint:0x7f855ad1bb00 H:[UIButton:0x7f855ad1bba0'Button'(46@188)] priority:188> |
当然这些都是不用 IB 和 View Debugging / Reveal 情况下的选择。
还有个优点就是类 ASCII-art,可视化的样式描述。
The Visual Format Language lets you use ASCII-art like strings to define your constraints. This provides a visually descriptive representation of the constraints.
下面是一个 CustomToolBar 的 Demo:
1 | import UIKit |
总结
经过几次项目的实践,发现还是 Visual Format 最好用,简洁直观。
参考
- UILayoutGuide – Auto Layout’s Invisible Helpers:
https://www.captechconsulting.com/blogs/uilayoutguide--auto-layouts-invisible-helpers - Programmatically Creating Constraints:
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ProgrammaticallyCreatingConstraints.html#//apple_ref/doc/uid/TP40010853-CH16-SW1