音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

iOS App开发中Masonry布局框架的基本用法解析
日期:2016-03-19 09:18:30   来源:脚本之家

Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了并具有高可读性,而且同时支持 iOS 和 Max OS X。Masonry是一个用代码写iOS或OS界面的库,可以代替Auto layout。Masonry的github地址:https://github.com/SnapKit/Masonry

Masonry使用讲解:

mas_makeConstraints 是给view添加约束,约束有几种,分别是边距,宽,高,左上右下距离,基准线。添加过约束后可以有修正,修正有offset(位移)修正和multipliedBy(倍率)修正。

语法一般是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍数和位移修正。

注意点1: 使用 mas_makeConstraints方法的元素必须事先添加到父元素的中,例如[self.view addSubview:view];

注意点2: masequalTo 和 equalTo 区别:masequalTo 比equalTo多了类型转换操作,一般来说,大多数时候两个方法都是 通用的,但是对于数值元素使用mas_equalTo。对于对象或是多个属性的处理,使用equalTo。特别是多个属性时,必须使用equalTo,例如 make.left.and.right.equalTo(self.view);

注意点3: 注意到方法with和and,这连个方法其实没有做任何操作,方法只是返回对象本身,这这个方法的左右完全是为了方法写的时候的可读性 。make.left.and.right.equalTo(self.view);和make.left.right.equalTo(self.view);是完全一样的,但是明显的加了and方法的语句可读性 更好点。

下面带着例子来看一下基础用法,假设我们现在的需求是:

1.我们现在只能确定我们控件的宽高以及左右的边距,需要对上下进行自动适应。
2.假设我们现在有四个控件,需要布局的界面是这个样子的

竖屏效果:

201631991509026.jpg (459×773)

横屏效果:

201631991533698.jpg (751×481)

第一步:在我们的控制器中导入Masonry所需要的文件

复制代码 代码如下:

#define MAS_SHORTHAND
#define MAS_SHORTHAND_GLOBALS
#import "Masonry.h"

第二步:在控制器中添加以下三个占位视图并设置颜色
复制代码 代码如下:

    //上面的占位视图
    UIView *topView = UIView.new;
    topView.backgroundColor = [UIColor redColor];
    [self.view addSubview:topView];
    //中间的占位视图
    UIView *centerView = UIView.new;
    centerView.backgroundColor = [UIColor grayColor];
    [self.view addSubview:centerView];
    //下面的占位视图
    UIView *bottomView = UIView.new;
    bottomView.backgroundColor = [UIColor blackColor];
    [self.view addSubview:bottomView];

第三步:开始分别给三个占位视图添加约束
复制代码 代码如下:

    //给上面的占位视图添加约束
    [topView makeConstraints:^(MASConstraintMaker *make) {       //头部及左边距分别为0
        make.top.left.equalTo(self.view).offset(0);
        //三个占位视图的高度等高
        make.height.equalTo(@[centerView,bottomView]);
        //设置top视图的高度
        make.width.equalTo(100);
    }];
    //中间视图的需要添加以下约束,高度、左边以及与上方占位视图的关系
     [centerView makeConstraints:^(MASConstraintMaker *make) {
        //左边的约束
        make.left.equalTo(self.view).offset(0);
        //设置三个占位视图等高
        make.width.equalTo(@[topView,bottomView]);
        //设置中间占位视图与上方视图的关联约束
        make.top.equalTo(topView.bottom).offset(150);

    }];
    //下面的约束主要设置下面的与中间视图的约束以及本身左边距的约束
    [bottomView makeConstraints:^(MASConstraintMaker *make) {
        make.left.bottom.equalTo(self.view).offset(0);
        make.top.equalTo(centerView.bottom).offset(150);

    }];


到了,这里。我们的三个占位视图已经基本完成了。那么让我们运行一下看下效果:

201631991554091.png (369×666)

由此我们发现中间空出的部分正好就是我们控件所需的位置了,那么下面我们就开始进行对控件的布局了。首先还是添加需要的左边的控件

复制代码 代码如下:

     UIImageView *imageView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"a"]];
    [self.view addSubview:imageView1];
    UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"b"]];
    [self.view addSubview:imageView2];

    //然后对这两个控件进行布局

    [imageView1 makeConstraints:^(MASConstraintMaker *make) {
        //分别设置起宽高
       make.width.height.equalTo(150);
        //左边的边距
       make.left.equalTo(self.view).offset(0);
       //设置其与上面占位视图和下面占位视图的间距
       make.top.equalTo(topView.bottom).offset(0);
       make.bottom.equalTo(centerView.top).offset(0);
    //控件2同上。
    [imageView2 makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.equalTo(150);
        make.left.equalTo(self.view).offset(0);
        make.top.equalTo(centerView.bottom).offset(0);
        make.bottom.equalTo(bottomView.top).offset(0);

    }];


代码到了这里左边的控件约束基本布局完成了,让我们来看一下运行的效果吧。

201631991611343.png (374×666)

到了这里我们就可以对右边的控件进行布局了。基于之前的经验我们就会发现右边的约束只需要添加本身的宽、高和右边边距以及基于左边控件的centerY值就足够了。好了,我们开始吧。

复制代码 代码如下:

    UIImageView *imageView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"a"]];
    [self.view addSubview:imageView3];
    UIImageView *imageView4 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"b"]];
    [self.view addSubview:imageView4];

    //该控件与左边的控件的关联
    [imageView3 makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.equalTo(150);
        make.right.equalTo(self.view).offset(0);
        make.centerY.equalTo(imageView1);

    }];
    //同上
    [imageView4 makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.equalTo(150);
        make.right.equalTo(self.view).offset(0);
        make.centerY.equalTo(imageView2);

    }];


到了这里基本上是大功告成了,到了这里只需要要把三个占位视图的背景颜色设置为透明就好了。
复制代码 代码如下:

    //另外两个也是
  bottomView.backgroundColor = [UIColor clearColor];

运行效果如图:

201631991629336.gif (445×457)

到了这里我们基本上就把基本的占位视图的介绍了联系完了。通过联系你可能会发现,无论是在StoryBoary上添加约束还是通过编码进行的智能布局都是基于对父控件或者对其他控件进行的关联。当然了如果你对AutoLayout的编码布局的话就可能就会觉得Masonry真的是好用的爆了。当然了,这么强大的Masonry,提供的功能也是很多的,这些就要靠大家来探索了,嘿嘿。

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    Windows系统Linux系统苹果MACAndroidiOS系统鸿蒙系统