声明 Swift 中的 Auto Layout:Cartography

分享到:
Cartography 是用来声明 Swift 中的 Auto Layout,无需输入任何 stringly 就可设置自己 Auto Layout 的约束声明。
声明 Swift 中的 Auto Layout:Cartography

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

项目主页:http://www.open-open.com/lib/view/home/1413941476247

昵    称:
验证码:

相关文档: