服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS App开发中Masonry布局框架的基本用法解析

iOS App开发中Masonry布局框架的基本用法解析

2021-01-11 15:57晓风沐晨 IOS

这篇文章主要介绍了iOS App开发中Masonry布局框架的基本用法解析,Masonry支持iOS和OSX的Auto Layout,在GitHub上的人气很高,需要的朋友可以参考下

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.假设我们现在有四个控件,需要布局的界面是这个样子的

竖屏效果:

iOS App开发中Masonry布局框架的基本用法解析

横屏效果:

iOS App开发中Masonry布局框架的基本用法解析

第一步:在我们的控制器中导入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);

    }];


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

 

iOS App开发中Masonry布局框架的基本用法解析

 

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

复制代码 代码如下:


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

    }];


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

 

iOS App开发中Masonry布局框架的基本用法解析

 

到了这里我们就可以对右边的控件进行布局了。基于之前的经验我们就会发现右边的约束只需要添加本身的宽、高和右边边距以及基于左边控件的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];


运行效果如图:

 

iOS App开发中Masonry布局框架的基本用法解析

 

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

延伸 · 阅读

精彩推荐
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22