美文网首页
Swift 下的Mansory

Swift 下的Mansory

作者: lxl125z | 来源:发表于2017-04-28 17:29 被阅读0次

    Mansory的常用类

    Mansory 是对NSLayoutConstraint的封装。

    Swift语言的,最好使用SnapKit布局框架,但是如果OC和Swift混合编码的话为了兼容OC,还是会用到Mansory框架。如果是纯Swift开发的话,尽量用
    pod 'SnapKit',同一个作者开发的。

    使用mas_makeConstrains方法的元素必须事先添加到父视图中

    对View的扩展类

    //约束方法
    func mas_makeConstraints(_ block: ((MASConstraintMaker?) -> Swift.Void)!) -> [Any]!
    func mas_updateConstraints(_ block: ((MASConstraintMaker?) -> Swift.Void)!) -> [Any]!
    func mas_remakeConstraints(_ block: ((MASConstraintMaker?) -> Swift.Void)!) -> [Any]!
    
    //计算型属性
    var mas_left: MASViewAttribute! { get }
    
    //其他方法
    //找到共同的父视图
    func mas_closestCommonSuperview(_ view: UIView!) -> Self!
    ……
    
    

    方法比较:

    • mas_makeConstraints 只负责添加约束 AutoLayout不能同时存在两条针对同一对象的约束否则会报错
    • mas_updateConstraints 针对上面的情况 会更新在block中出现的约束 不会导致出现两个相同约束的情况
    • mas_remakeConstraints 清除之前所有的约束只保留新的约束

    MASConstraintMaker类

    open var left: MASConstraint! { get }
    open var top: MASConstraint! { get }
    ……
    open var edges: MASConstraint! { get }
    open var size: MASConstraint! { get }
    open var center: MASConstraint! { get }
    (默认是父视图的中心,设置CGpoint是设置偏移中心点的值)
    

    MASConstraint类

    //insert
    func insets() -> ((UIEdgeInsets) -> MASConstraint?)!
    func centerOffset() -> ((CGPoint) -> MASConstraint?)!
    func offset() -> ((CGFloat) -> MASConstraint?)!
    func multipliedBy() -> ((CGFloat) -> MASConstraint?)!
    //设置优先级
    func priority() -> ((MASLayoutPriority) -> MASConstraint?)!
    //常用方法
    func equalTo() -> ((Any?) -> MASConstraint?)!
    func greaterThanOrEqualTo() -> ((Any?) -> MASConstraint?)!
    func lessThanOrEqualTo() -> ((Any?) -> MASConstraint?)!
    func with() -> MASConstraint!
    ……
    func centerYWithinMargins() -> MASConstraint!
    //增加程序可读性
    func and() -> MASConstraint!
    func with() -> MASConstraint!
    
    //直接设置
    func setInsets(_ insets: UIEdgeInsets)
    func setSizeOffset(_ sizeOffset: CGSize)
    ……
    
    

    基本使用


    make 是一个MASConstraintMaker类的实例,然后调用left后,获取MASConstraint类的实例,然后调用 equalTo()方法后,返回一个(Any?) -> MASConstraint?的闭包,然后直接在后面拼接(50)返回MASConstraint的实例(应该和上述实例相同),然后继续设置约束。

    属性比较

    1、mas_equalTo 和equalTo

    mas_equalTo是个宏定义,mas_equalToequalTo的扩展,可完全替代equalTo

    • equalTo()(@3)必须转换成对象形式;
    • 支持类型转换,支持复杂类型。是对equalTo的封装。支持CGSize CGPoint NSNumber UIEdgeinsets

    ps:swift中似乎没有特别的差异,编译器转化成了下面的方法:

    open func equalTo() -> ((Any?) -> MASConstraint?)!
    
    

    2、leftMargin和left

    NSLayoutAttributeLeft指的是控件的左边,具体来说是控件的最左边;NSLayoutAttributeLeftMargin也是指控件的左边,但是不是最左边,具体距离最左边有多大的Margin和控件的layoutMargins有关。

    ps:默认是{8,8,8,8},但是如果是viewController的root view则top和bottom的margins为0,左右margins可能是16或者20,这取决于当前的view尺寸,并且不能修改。

    3、and和with

    这里的and和with都没有具体操作只是拿来增加程序可读性

    PS:最后加一段SnapKit的代码

       backView.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(50)
            make.right.equalToSuperview().offset(-50)
            make.top.equalToSuperview().offset(50)
            make.height.equalTo(backView.snp.width)
        }
    
    

    相关文章

      网友评论

          本文标题:Swift 下的Mansory

          本文链接:https://www.haomeiwen.com/subject/qygmattx.html