聲明 Swift 中的 Auto Layout:Cartography

jopen 10年前發布 | 21K 次閱讀 Apple Swift開發 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.baiduhome.net/lib/view/home/1413941476247

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!