MagiConstraints 2.0.0

MagiConstraints 2.0.0

BelalSamy维护。



  • 作者:
  • Belal Samy

MagiConstraints

AutoLayout 的语法糖,用于通过单行函数快速设置约束,像魔法一样

MagiConstraints

特性

  • 约束默认启用。
  • 不需要设置 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文件。