zoukankan      html  css  js  c++  java
  • 第三方框架-纯代码布局:Masonry的简单使用

    Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。系统AutoLayout支持的操作,Masonry都支持,相比系统API功能来说,Masonry是有过之而无不及。

    Masonry采取了链式编程的方式,代码理解起来非常清晰易懂,而且写完之后代码量看起来非常少。之前用NSLayoutConstraint写很多代码才能实现的布局,用Masonry最少一行代码就可以搞定。下面看到Masonry的代码就会发现,太简单易懂了。

    Masonry基础API

    mas_makeConstraints()  添加约束 

    mas_remakeConstraints()  移除之前的约束,重新添加新的约束 

    mas_updateConstraints()  更新约束,写哪条更新哪条,其他约束不变 

    equalTo()  参数是对象类型,一般是视图对象或者mas_width这样的坐标系对象 

    mas_equalTo()  和上面功能相同,参数可以传递基础数据类型对象,可以理解为比上面的API更强大 

    width()  用来表示宽度,例如代表view的宽度 

    mas_width()  用来获取宽度的值。和上面的区别在于,一个代表某个坐标系对象,一个用来获取坐标系对象的值

    view的requiresConstraintBasedLayout方法--如果你在- (void)updateConstraints这个方法里面给自定义的控件更新控件的constraint,那么需要重写+ (BOOL)requiresConstraintBasedLayout方法,并且返回YES.否则的话,就不会显示该控件。如果直接在init方法中设置自定义控件的constraint,那么则不需要重写+ (BOOL)requiresConstraintBasedLayout方法,也可以显示。

    更新约束和布局

    - (void)setNeedsUpdateConstraints  标记需要进行重新布局
    - (void)updateConstraintsIfNeeded  调用此方法,如果有标记为需要重新布局的约束,则立即进行重新布局,内部会调用updateConstraints方法
    - (void)updateConstraints  重写此方法,内部实现自定义布局过程
    - (BOOL)needsUpdateConstraints  当前是否需要重新布局,内部会判断当前有没有被标记的约束
    关于UIView重新布局相关的API,主要用以下三个API:
    - (void)setNeedsLayout  标记为需要重新布局
    - (void)layoutIfNeeded  查看当前视图是否被标记需要重新布局,有则在内部调用layoutSubviews方法进行重新布局 
    - (void)layoutSubviews  重写当前方法,在内部完成重新布局操作

    Masonry常用方法

    设置内边距

    [self.yellowView mas_makeConstraints:^(MASConstraintMaker *make) { 

    make.left.equalTo(self.view).with.offset(10); 

    make.top.equalTo(self.view).with.offset(10); 

    make.right.equalTo(self.view).with.offset(-10); 

    make.bottom.equalTo(self.view).with.offset(-10); 

    }];

    [self.blueView mas_makeConstraints:^(MASConstraintMaker *make) { 

    make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10)); 

    }];

    更新约束

    [self.greenView mas_updateConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(100, 100)); }];

    大于等于和小于等于某个值的约束

    [self.textLabel mas_makeConstraints:^(MASConstraintMaker *make) { 

    make.center.equalTo(self.view); // 设置宽度小于等于200 

    make.width.lessThanOrEqualTo(@200); // 设置高度大于等于10 

    make.height.greaterThanOrEqualTo(@(10)); }];

    使用基础数据类型当做参数

    /** 如果想使用基础数据类型当做参数,Masonry为我们提供了"mas_xx"格式的宏定义。 这些宏定义会将传入的基础数据类型转换为NSNumber类型,这个过程叫做封箱(Auto Boxing)。 "mas_xx"开头的宏定义,内部都是通过MASBoxValue()函数实现的。 这样的宏定义主要有四个,分别是mas_equalTo()、mas_offset()和大于等于、小于等于四个。 */ 

    [self.redView mas_makeConstraints:^(MASConstraintMaker *make) { 

    make.center.equalTo(self.view); 

    make.width.mas_equalTo(100); 

    make.height.mas_equalTo(100); }];

    设置约束优先级

    /** Masonry为我们提供了三个默认的方法,priorityLow()、priorityMedium()、priorityHigh(),这三个方法内部对应着不同的默认优先级。 除了这三个方法,我们也可以自己设置优先级的值,可以通过priority()方法来设置。 */ 

    [self.redView mas_makeConstraints:^(MASConstraintMaker *make) { 

    make.center.equalTo(self.view); 

    make.width.equalTo(self.view).priorityLow(); 

    make.width.mas_equalTo(20).priorityHigh(); 

    make.height.equalTo(self.view).priority(200); 

    make.height.mas_equalTo(100).priority(1000); }];

    设置约束比例

    // 设置当前约束值乘以多少,例如这个例子是redView的宽度是self.view宽度的0.2倍。 

    [self.redView mas_makeConstraints:^(MASConstraintMaker *make) { 

    make.center.equalTo(self.view); 

    make.height.mas_equalTo(30); 

    make.width.equalTo(self.view).multipliedBy(0.2); }]

    参考文章:

    iOS自动布局框架-Masonry详解

  • 相关阅读:
    ARM板卡ftp客户端应用
    vsftp移植(待续)
    /dev/null脚本中作用
    amazeui.css
    将td中文字过长的部分变成省略号显示的小技巧
    div非弹出框半透明遮罩实现全屏幕遮盖css实现
    重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息
    linux 下启动SVN服务
    用SVN checkout源码时,设置账号
    svn提示out of date
  • 原文地址:https://www.cnblogs.com/LifeTechnologySupporter/p/9723032.html
Copyright © 2011-2022 走看看