声明 Swift 中的 Auto Layout:Cartography
Cartography 是用来声明 Swift 中的 Auto Layout,无需输入任何 stringly 就可设置自己 Auto Layout 的约束声明。
How to use
Call the layout
function with your UIView
or NSView
instances as well as a closure in which you declare the constraints between the different attributes of your views:
layout(view1, view2) { view1, view2 in view1.width == (view.superview!.width - 50) * 0.5 view2.width == view1.width - 50 view1.height == 40 view2.height == view1.height view1.centerX == view.superview!.centerX view2.centerX == view1.centerX view1.top >= view.superview!.top + 20 view2.top == view1.bottom + 20 }
Supported attributes
Cartography supports all built-in attributes as of iOS 7 and OS X 10.9, those are: width
, height
, top
, right
bottom
, left
, leading
, trailing
,centerX
, centerY
and baseline
. These can be further refined using the following operators: *
, /
, +
and -
.
Additionally, it supports convenient compound attributes that allow you to assign multiple attributes at once:
layout(view) { view in view.size == view.superview!.size / 2 view.center == view.superview!.center } layout(view) { view in view.edges == inset(view.superview!.edges, 20, 20, 40, 20) }
Setting priorities
You can set the priorities of your constraints using the ~
operator:
layout(view) { view in view.width >= 200 ~ 100 view.height >= 200 ~ 100 }
Capturing constraints
Since the ==
, >=
, <=
and ~
emit NSLayoutConstraint
instances, you can capture their results if you need to refer to the layout constraints at a later time:
var width: NSLayoutConstraint? layout(view) { view in width = (view.width == 200 ~ 100) }
Note that declaring compound attributes returns multiple constraints at once:
var constraints: NSLayoutConstraint[]? layout(view) { view in constraints = (view.size == view.superview!.size ~ 100) }来自:http://www.iteye.com/news/29583