美文网首页杏仁丶的iOS学习专题
代码适配Masonry使用的详细介绍

代码适配Masonry使用的详细介绍

作者: Crazy2015 | 来源:发表于2016-04-25 18:46 被阅读107次
    Masonry简介

    Masonry是一个轻量级的布局框架,它拥有自己的描述语法(采用更优雅的链式语法封装)来自动布局,具有很好可读性且同时支持iOS和Max OS X等。
    总之,对于侧重写代码的coder,请你慢慢忘记Frame,喜欢Masonry吧

    使用前的准备

    若是你对于自动布局很熟练的话,再接触这个第三方Masonry
    很容易上手的,对UI界面显示的控件的约束本质都是相同的,现在呢,我一般都是喜欢在控制器里导入 #import "Masonry.h"
    之前再添加两个宏,来提高App的开发效率。

    //1. 对于约束参数可以省去"mas_"
    #define MAS_SHORTHAND
    
    //2. 对于默认的约束参数自动装箱
    #define MAS_SHORTHAND_GLOBALS
    
    即:需要我们导入的框架与宏如下
    //define this constant if you want to use Masonry without the 'mas_' prefix
    #define MAS_SHORTHAND
    //define this constant if you want to enable auto-boxing for default syntax
    #define MAS_SHORTHAND_GLOBALS
    #import "Masonry.h" 
    

    宏必须添加在头文件前面 -- 切记

    添加约束前提被约束的必须有父控件,其中约束项都必须是UIView或子类的实例

    约束的属性
    在此我就列举几个可能不太熟悉的吧

    @property (nonatomic, strong, readonly) MASConstraint *leading; //首部
    @property (nonatomic, strong, readonly) MASConstraint *trailing; //尾部
    @property (nonatomic, strong, readonly) MASConstraint *baseline; //文本基线
    
    
    约束的三种方法
    /** 
    //这个方法只会添加新的约束 
    [blueView mas_makeConstraints:^(MASConstraintMaker *make) { 
    
    }]; 
    // 这个方法会将以前的所有约束删掉,添加新的约束 
    [blueView mas_remakeConstraints:^(MASConstraintMaker *make) { 
    
    }]; 
    // 这个方法将会覆盖以前的某些特定的约束 
    [blueView mas_updateConstraints:^(MASConstraintMaker *make) { 
    }]; 
    */
    
    
    常见约束的各种类型
     1.尺寸:width、height、size
     2.边界:left、leading、right、trailing、top、bottom
     3.中心点:center、centerX、centerY
     4.边界:edges
     5.偏移量:offset、insets、sizeOffset、centerOffset
     6.priority()约束优先级(0~1000),multipler乘因数, dividedBy除因数
    
    Masonry约束易忽略的技术点

    使用Masonry不需要设置控件的translatesAutoresizingMaskIntoConstraints属性为NO;
    防止block中的循环引用,使用弱引用(这是错误观点),masonry,的block没有进行copy,不会形成循环引用的__weak typeof (self) weakSelf = self;(没必要的写法)

    Masonry约束控件出现冲突的问题

    当约束冲突发生的时候,我们可以设置view的key来定位是哪个view
    redView.mas_key = @"redView";
    greenView.mas_key = @"greenView";
    blueView.mas_key = @"blueView";
    若是觉得这样一个个设置比较繁琐,怎么办呢,Masonry则提供了批量设置的宏MASAttachKeys
    MASAttachKeys(redView,greenView,blueView); //一句代码即可全部设置

    equalTo 和 mas_equalTo的区别
    #define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__)))
    #define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
    #define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
    #define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__)))
    

    得出结论:mas_equalTo只是对其参数进行了一个BOX(装箱) 操作,目前支持的类型:数值类型(NSNumber)、 点(CGPoint)、大小(CGSize)、边距(UIEdgeInsets),而equalTo:这个方法不会对参数进行包装。

    转载地址:
    http://www.jianshu.com/p/e3162f3c61fa

    相关文章

      网友评论

      • 舒马赫:Masory写的很棒,但是不喜欢纯代码写界面,太慢了,另外由于autolayout先天原因布局速度是比较慢的,会影响帧率。推荐使用xml的布局库FlexLib,采用前端布局标准flexbox(不使用autolayout),支持热刷新,自动计算高度等。可以到这里了解详细信息:

        https://github.com/zhenglibao/FlexLib

      本文标题:代码适配Masonry使用的详细介绍

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