Swift 下的Mansory

2017-04-28  本文已影响0人  lxl125z

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!
……

方法比较:

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

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)
    }

上一篇下一篇

猜你喜欢

热点阅读