MagiConstraints
AutoLayout 的语法糖,用于通过单行函数快速设置约束,像魔法一样
特性
- 约束默认启用。
- 不需要设置
translatesAutoresizingMaskIntoConstraints
,因为MagiConstraints
会自动为您处理。 - 通过单行函数
magiConstraints()
,在一条线中满足所有约束:X 轴、宽度、Y 轴和高度 - 使用
enum
参数覆盖满足每个约束的不同方法 - 还提供
miniConstraints()
函数以单独使用约束 - 通过单行函数
magiCreate
创建动态UIScrollView
- 通过单行函数
magiCreate
创建UIStackView
示例
要运行示例项目,请先克隆存储库,然后在 Example 目录下运行 pod install
。
import 'MagiConstriants'
viewController
// Views
var scrollView = UIScrollView()
var containerView = UIView()
var label = UILabel()
var greenView = UIView()
var stackView = UIStackView()
var view1 = UIView()
var view2 = UIView()
var view3 = UIView()
ViewDidLoad
view.addSubview(scrollView)
scrollView.magiCreate(container: containerView)
containerView.addSubviews([label, greenView])
greenView.addSubview(stackView)
let subviews = [view1, view2, view3]
stackView.magiCreate(subviews: subviews, direction: .vertical, distribution: .fillEqually(20))
// magic constraints ( satisify all constraints in one line )
label.magiConstraints(XW: .leadingAndCenter(nil, 20), YH: .TopAndBottom(nil, 20, greenView, 20))
greenView.magiConstraints(XW: .leadingAndCenter(nil, 20), Y: .bottom(nil, 20), H: .fixed(500))
stackView.magiConstraints(XW: .leadingAndCenter(nil, 20), YH: .topAndCenter(nil, 20))
安装
MagiConstraints 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 文件中:
pod 'MagiConstriants'
使用方法
如果施加在 superview
或 任何其他视图
上,约束的行为会有所不同
nil = superview
是默认值,因此可以轻松更改 superview 而无需更改大量代码
superview
- 对应于 superview 的
leading
- 对应于 superview 的
trailing
- 对应于 superview 的
top
- 对应于 superview 的
bottom
任何其他视图
- 对应于视图的
trailing
- 对应于视图的
leading
- 对应于视图的
bottom
- 对应于视图的
top
💡 请查看文档部分,以了解每个约束枚举参数的不同案例!
添加子视图(示例)
view.addSubviews([subview1, subview2, subview3])
magiConstraints ( 示例 )
// XWYH
view1.magiConstraints(X: .center(nil), W: .fixed(500), Y: .center(nil), H: .wrapContent)
view1.magiConstraints(X: .leading(nil, 20), W: .wrapContent, Y: .top(nil, 20), H: .equal(view2, 0.5))
// XW, Y, H
view1.magiConstraints(XW: .leadingAndCenter(nil, 20), Y: .top(nil, 20), H: .wrapContent)
view1.magiConstraints(XW: .leadingAndTrailing(nil, 20, view2, 20), Y: .center(nil), H: .fixed(500))
// X, W, YH
view1.magiConstraints(X: .center(nil), W: .equal(nil, 0.75), YH: .TopAndBottom(nil, 20, view2, 20))
view1.magiConstraints(X: .leading(view2, 20), W: .equal(nil, 1), YH: .topAndCenter(nil, 20))
// XW, YH
view1.magiConstraints(XW: .leadingAndCenter(nil, 20), YH: .topAndCenter(nil, 20))
view1.magiConstraints(XW: .leadingAndTrailing(nil, 10, nil, 10), YH: .bottomAndCenter(nil, 20))
miniConstraints ( 示例 )
// Size Only - W, H
view1.miniConstraints(W: .fixed(500), H: .wrapContent)
// Position Only - X, Y
view1.miniConstraints(X: .center(nil), Y: .bottom(view2, 20))
// X Only
view1.miniConstraints(X: .leading(nil, 20))
// W Only
view1.miniConstraints(W: .equal(view2, 0.5))
// Y Only
view1.miniConstraints(Y: .center(nil))
// H Only
view1.miniConstraints(H: .wrapContent)
// XW Only
view1.miniConstraints(XW: .leadingAndTrailing(nil, 20, nil, 20))
// YH Only
view1.miniConstraints(YH: .topAndCenter(nil, 20))
Dynamic UIScrollView ( 示例 )
// magiCreate
view.addSubview(scrollView)
scrollView.magiCreate(container: containerView)
containerView.addSubviews([view1, view2])
UIStackView ( 示例 )
// magiCreate
view.addSubview(stackView)
let subviews = [view1, view2, view3]
stackView.magiCreate(subviews: subviews, direction: .vertical, distribution: .fillEqually(20)) // spacing = 20
文档 ( 枚举类型 )
X
X轴 | 描述 |
---|---|
.leading | 接受 2 个参数,一个是 UIView 视图,另一个是 CGFloat 常量填充值 |
.trailing | 接受 2 个参数,一个是 UIView 视图,另一个是 CGFloat 常量填充值 |
.center | 接受 1 个参数,即 UIView 视图(水平居中) |
W
宽度 | 描述 |
---|---|
.wrapContent | 动态宽度根据视图内容增长和收缩 |
.固定 | 接受1个参数 CGFloat 用于常量宽度值 |
.等值 | 接受2个参数 UIView 用于视图和 CGFloat 用于倍增值 |
Y
Y轴 | 描述 |
---|---|
.顶部 | 接受 2 个参数,一个是 UIView 视图,另一个是 CGFloat 常量填充值 |
.底部 | 接受 2 个参数,一个是 UIView 视图,另一个是 CGFloat 常量填充值 |
.center | 接受1个参数 UIView 用于视图(垂直居中) |
H
高度 | 描述 |
---|---|
.wrapContent | 动态高度根据视图内容增长和收缩 |
.固定 | 接受1个参数 CGFloat 用于常量高度值 |
.等值 | 接受2个参数 UIView 用于视图和 CGFloat 用于倍增值 |
XW
X轴 & 宽度 | 描述 |
---|---|
. LeadingAndCenter | 接受2个参数 UIView 用于视图和 CGFloat 用于常量填充值(始终相对于父视图水平居中) |
. TrailingAndCenter | 接受2个参数 UIView 用于视图和 CGFloat 用于常量填充值(始终相对于父视图水平居中) |
. LeadingAndTrailing | 接受4个参数 UIView 用于 LeadingView 和 CGFloat 用于常量填充值 + 另一个 UIView 用于 TrailingView 和 CGFloat 用于常量填充值 |
. LeadingAndTrailingAndHeight | 接受5个参数 UIView 用于 LeadingView 和 CGFloat 用于常量填充值 + 另一个 UIView 用于 TrailingView 和 CGFloat 用于常量填充值 + W 枚举作为参数设置宽度 |
YH
Y轴 & 高度 | 描述 |
---|---|
. TopAndCenter | 接受2个参数 UIView 用于视图和 CGFloat 用于常量填充值(始终相对于父视图垂直居中) |
. BottomAndCenter | 接受2个参数 UIView 用于视图和 CGFloat 用于常量填充值(始终相对于父视图垂直居中) |
. TopAndBottom | 接受4个参数 UIView 用于 TopView 和 CGFloat 用于常量填充值 + 另一个 UIView 用于 BottomView 和 CGFloat 用于常量填充值 |
. TopAndBottomAndHeight | 接受5个参数 UIView 用于 TopView 和 CGFloat 用于常量填充值 + 另一个 UIView 用于 BottomView 和 CGFloat 用于常量填充值 + H 枚举作为参数设置高度 |
作者
BelalSamy, [email protected]
许可证
MagiConstriants 在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。