测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年3月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✓ |
由 Evan Liu 维护。
FormationLayout
是一个根视图的最顶层布局类。
FormationLayout
采用一个 UIView
作为其 rootView
。rootView
的 默认不设置为 false,但可以在构造函数中设置。
将自动设置为 false。
superView
的子视图将自动添加到 rootView
。demo { canvas, icon in
FormationLayout(rootView: canvas)[icon].center(equalTo: canvas)
}
视图锚点:left、right、top、bottom、leading、trailing、width、height、centerX、centerY、lastBaseline、firstBaseline、centerXWithinMargins、centerYWithinMargins
layout[view].anchor(equalTo: view2, multiplyBy: multiplier, plus: constant)
layout[view].anchor(equalTo: anchor2, of: view2, multiplyBy: multiplier, minus: constant)
layout[view].anchor(greaterThanOrEqualTo: view2)
layout[view].anchor(lessThanOrEqualTo: value)
(仅宽度和高)demo { canvas, icon1, icon2, icon3 in
let layout = FormationLayout(rootView: canvas)
layout[icon1].top(equalTo: canvas, plus: 10).leading(equalTo: canvas, plus: 20)
layout[icon2].top(equalTo: icon1).leading(equalTo: .trailing, of: icon1, plus: 10)
layout[icon3].bottom(equalTo: canvas, minus: 10).leading(equalTo: icon1, multiplyBy: 2)
}
width:height
demo { canvas, icon1, icon2, icon3 in
let layout = FormationLayout(rootView: canvas)
layout[icon1].aspectRatio(equalTo: 1.5).width(equalTo: 30)
layout[icon2].size(equalTo: 30).center(equalTo: canvas, multiplyBy: 0.8)
layout[icon3].size(equalTo: icon2, minus: 10).center(equalTo: icon2, plus: 30)
}
layout[view].pin(to: canvas)
将设置
layout[view].pin(to: canvas, margin: 10)
将设置
demo { canvas, icon1, icon2, icon3 in
let layout = FormationLayout(rootView: canvas)
layout[icon1].pin(to: canvas, edgesWithMargin: [.top: 10, .leading: 3])
layout[icon2].pin(to: canvas, margin: 30)
layout[icon3].pin(to: canvas, edges: [.topBottom, .trailing], margin: 3)
}
demo { canvas, icon1, icon2, icon3 in
let layout = FormationLayout(rootView: canvas)
layout[icon1].center(equalTo: canvas)
layout[icon2].before(icon1).above(icon1, gap: 5)
layout[icon3].after(icon1).below(icon1, gap: 5)
}
layout.group(view1, view2)
会为
demo { canvas, icon1, icon2, icon3 in
let layout = FormationLayout(rootView: canvas)
layout.group(icon1, icon2, icon3).centerY(equalTo: canvas)
layout[icon1].leading(equalTo: canvas, plus: 5)
layout[icon2].centerX(equalTo: canvas)
layout[icon3].trailing(equalTo: canvas, minus: 5)
}
layout.when()
为一个条件创建约束,而 not
则为其否则部分创建约束。
demo { canvas, icon in
var isLoggedIn = true
let layout = FormationLayout(rootView: canvas)
let loggedInLayout = layout.when { isLoggedIn }
layout[icon].centerX(equalTo: canvas)
loggedInLayout[icon].top(equalTo: canvas, plus: 10)
loggedInLayout.not[icon].bottom(equalTo: canvas, minus: 10)
layout.update()
}
isLoggedIn = false
所有约束默认具有
demo { canvas, icon in
let layout = FormationLayout(rootView: canvas)
layout[icon].centerX(equalTo: canvas).size(equalTo: 20)
.centerY(equalTo: canvas, at: UILayoutPriorityDefaultLow) // Try UILayoutPriorityRequired
.bottom(equalTo: canvas, at: UILayoutPriorityDefaultHigh)
}
UILayoutPriorityRequired
demo
最右侧的“展示结果”按钮。