00『 基础知识 』Myron Work Space 的每周一记Swift&Objective-C

AutoLayout

2016-08-13  本文已影响183人  黄穆斌

这是一篇我关于 AutoLayout 的使用以及学习的总结文章。持续更新。
2016-08-22 更新,修复了少许 Bug. 变更了函数名。重写了一下文档。


AutoLayout.swift

Github 传送门

AutoLayout 封装库。
使用函数式编程简化纯代码 AutoLayout 的编写过程,并保持代码的简洁。
纯 Swift 编写,轻量,易用。
觉得好用的话,给我点个星星,谢谢。

代码调用示例图代码调用示例图
// 上述示例图的代码实现
func useAutoLayout() {
    let SView: UIView = UIView()
    let AView: UIView = UIView()
    let BView: UIView = UIView()
    SView.addSubview(AView)
    SView.addSubview(BView)
    
    // 1
    AutoLayout(SView, AView).centerSize()
    
    // 2 
    AutoLayout(SView, AView).centerSize(0, 0.5)
    
    // 3
    AutoLayout(SView, AView).leadingTopTrailing().width(0, 0.5)
    
    // 4 
    AutoLayout(SView, BView).leadingTopTrailing()
    AutoLayout(SView, AView).topTrailingBottom()
        .second(BView).width().horizontal(10)
    
    // 5
    AutoLayout(SView, AView).size(AView, 50, 50).centerX().centerY(0, 0.5)
    AutoLayout(SView, BView).size(BView, 50, 50).centerX().centerY(0, 1.5)
    
    // 6
    AutoLayout(SView, AView)
        .width(AView, 50)
        .aspectRatio(AView)
        .add(.CenterX, SEdge: .CenterX, constant: 0, multiplier: 1)
        .add(.CenterY, SEdge: .CenterY, constant: 0, multiplier: 0.5)
    AutoLayout(SView, BView)
        .width(BView, 50)
        .aspectRatio(BView)
        .add(.CenterX, SEdge: .CenterX, constant: 0, multiplier: 1)
        .add(.CenterY, SEdge: .CenterY, constant: 0, multiplier: 1.5)
}

Api

Api 设计规则

  • 属性:必须使用的视图对象以及其设置方法,以及设置之后的 layout 对象。
  • 方法
    • 全自定义方法:可完全自定义 Layout 的方法。
    • 单边,多边... 按边数定义的 Layout 方法,函数名称即为要设置对齐的边。
      参数基本上都设置了默认值,并省略外部参数名。

设计思路

来源

对苹果 NSLayoutConstraint 类进行封装。并提供链式编程方法,简洁调用代码。

NSLayoutConstraint
convenience init(item view1: AnyObject,
            attribute attr1: NSLayoutAttribute,
         relatedBy relation: NSLayoutRelation,
               toItem view2: AnyObject?,
            attribute attr2: NSLayoutAttribute,
      multiplier multiplier: CGFloat,
                 constant c: CGFloat)

注意要点:

view1.att1 relation view2.attr2 * multiplier + constant
或者
view1.att1 (==, >=, <=) view2.attr2 * mulitiplier + constant

设计原则

更新记录

上一篇 下一篇

猜你喜欢

热点阅读