聲明 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