Skip to content

Latest commit

 

History

History
175 lines (118 loc) · 6.56 KB

README_ZH.md

File metadata and controls

175 lines (118 loc) · 6.56 KB

Driftwood CI Version License Platform

English|中文

Driftwood是一个轻量的自动布局框架,用于iOS, tvOS和macOS。

Usage

Driftwood的使用很简单,你只需要简单几行代码就能完整的设置好约束。

比如,一个box相对于superview的边距为0pt,代码如下:

let box = UIView()
superview.addSubview(box) // 先添加到superview上,才能再添加约束。
box.dw.make().left(0).top(0).right(0).bottom(0)

或者另外一种写法:

let box = UIView()
superview.addSubview(box) // 先添加到superview上,才能再添加约束。
box.dw.make().edge(insets: .zero)

Attribute

所有的NSLayoutConstraint.Attribute情况在Driftwood中都是可用的.

比如说,view1view2的底部,偏移10pt:

view1.dw.make().top(10, to: view2.dw.bottom)

全部的NSLayoutConstraint.Attribute情况在Driftwood中对应关系如下表:

Horizontal attribute property Horizontal attribute function NSLayoutConstraint.Attribute
dw.left dw.make().left() .left
dw.right dw.make().right() .right
dw.leading dw.make().leading() .leading
dw.trailing dw.make().trailing() .trailing
dw.centerX dw.make().centerX() .centerX
dw.leftMargin dw.make().leftMargin() .leftMargin
dw.rightMargin dw.make().rightMargin() .rightMargin
dw.leadingMargin dw.make().leadingMargin() .leadingMargin
dw.trailingMargin dw.make().trailingMargin() .trailingMargin
Vertical attribute property Vertical attribute function NSLayoutConstraint.Attribute
dw.top dw.make().top() .top
dw.bottom dw.make().bottom() .bottom
dw.centerY dw.make().centerY() .centerY
dw.lastBaseline dw.make().lastBaseline() .lastBaseline
dw.firstBaseline dw.make().firstBaseline() .firstBaseline
dw.topMargin dw.make().topMargin() .topMargin
dw.bottomMargin dw.make().bottomMargin() .bottomMargin
dw.centerYWithinMargins dw.make().centerYWithinMargins() .centerYWithinMargins
Size attribute property Size attribute function NSLayoutConstraint.Attribute
dw.width dw.make().width() .width
dw.height dw.make().height() .height

Relation & Multiply & Priority

  • relation: 默认为.equal
  • multiply: 默认为 1
  • priority: 默认为 .required

dw.make()

就像在Quick Start中看到的,你可以使用dw.make()来设置完整的约束。

dw.update()

你可以使用dw.update()来更新约束的 constantpriority 的值

view1.dw.update().top(200) // 更新top约束的constant为200pt

view2.dw.update().left(100, priority: .required) // 更新left约束的constant为100pt,priority为required

dw.remake()

dw.remake()dw.make()很像,也用于设置约束,但会先移除当前view上所有通过Driftwood设置的约束。

view.dw.remake().left(20).top(30).width(20).height(10) // 先移除view的相关约束,然后再设置新约束

dw.remove()

你可以使用dw.remove() 来移除当前view上通过Driftwood设置的约束。

view.dw.remove().left().top()

dw.removeAll()

有时候,你可能只想移除之前设置的所有约束,你可以使用 dw.removeAll()来移除当前view上通过Driftwood设置的所有约束。

view.dw.removeAll()

LayoutGuide

Driftwood可以很方便的对LayoutGuide应用约束。

let guide = UILayoutGuide()
superview.addLayoutGuide(guide) // 添加LayoutGuide到superview
guide.dw.make().left(10).top(10).height(10).width(10) // 给LayoutGuide添加约束

let box = UIView()
superview.addSubview(box)
box.dw.make().top(0, to: guide.dw.bottom).left(0).right(0).height(10) // LayoutGuide和View混合使用

Cache

所有通过Driftwood创建的约束都会被缓存起来,以便于之后复用这些约束。

Debug

你可以给一个 View 或者 LayoutGuide添加标签,以用于debug。

view.dw.make(labeled: "MyView").left(0).left(0) // 给"MyView"添加了重复的left约束

如果出现错误的话,会有如下样式的打印:

<Driftwood.@ViewController#23.[make left].(UIView`MyView`:0x00007fc636525da0)>: Duplicated constraint.

如果遇到 Unable to simultaneously satisfy constraints 这种约束错误,则会对每一个通过Driftwood设置的约束有如下样式的打印:

<Driftwood.@ViewController#23.[make left].(UIView`MyView`:0x00007fc636525da0.left == UIView:0x00007fc636525111.right)>

注意:在release下,Driftwood不会打印debug信息。

Demo

你可以下载这个仓库来查看更多的使用方法。

Requirements

  • iOS 8.0+, macOS 10.11+, tvOS 9.0+
  • Swift 4.2+

Installation

Driftwood is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'Driftwood'

License

Driftwood is available under the MIT license. See the LICENSE file for more info.