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

以下将从三个方面介绍 如下:

- Masonry配置                   - Masonry使用                  - Masonry实例

1   Masonry配置

- 推荐使用pods方式引入类库,pod 'Masonry',若不知道pod如何使用,可参考文章: 提高ios开发效率的工具

然后  - 引入头文件 #import "Masonry.h"即可。

Masonry使用讲解

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

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

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

注意点2: mas_equalTo 和 equalTo 区别:mas_equalTo 比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方法的语句可读性 更好点。

Masonry初级使用例子

// exp1: 中心点与self.view相同,宽度为100*400     300*200

-(void)exp1{

UIView *view = [UIView new];

[view setBackgroundColor:[UIColor redColor]];

[self.view addSubview:view];

[view mas_makeConstraints:^(MASConstraintMaker *make) {

make.center.equalTo(self.view);

make.size.mas_equalTo(CGSizeMake(100,400));

}];

UIView *view1=[UIView new];

[view1 setBackgroundColor:[UIColor blackColor]];

[self.view addSubview:view1];

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {

make.center.equalTo(self.view);

make.size.mas_equalTo(CGSizeMake(300, 200));

}];

}

//exp2: 上下左右边距都为10

-(void)exp2{

UIView *view = [UIView new];

[view setBackgroundColor:[UIColor redColor]];

[self.view addSubview:view];

[view mas_makeConstraints:^(MASConstraintMaker *make) {

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

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

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

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

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

}];

}

//exp3 让两个高度为150的view垂直居中且等宽且等间隔排列 间隔为10

-(void)exp3{

UIView *view1 = [UIView new];

[view1 setBackgroundColor:[UIColor blueColor]];

[self.view addSubview:view1];

UIView *view2 = [UIView new];

[view2 setBackgroundColor:[UIColor redColor]];

[self.view addSubview:view2];

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {

make.centerY.mas_equalTo(self.view.mas_centerY);

make.height.mas_equalTo(150);

make.width.mas_equalTo(view2.mas_width);

make.left.mas_equalTo(self.view.mas_left).with.offset(10);

make.right.mas_equalTo(view2.mas_left).offset(-10);

}];

[view2 mas_makeConstraints:^(MASConstraintMaker *make) {

make.centerY.mas_equalTo(self.view.mas_centerY);

make.height.mas_equalTo(150);

make.width.mas_equalTo(view1.mas_width);

make.left.mas_equalTo(view1.mas_right).with.offset(10);

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

}];

}

Masonry高级使用例子1

iOS计算器使用Masorny布局:

//高级布局练习 ios自带计算器布局

-(void)exp4{

//申明区域,displayView是显示区域,keyboardView是键盘区域

UIView *displayView = [UIView new];

[displayView setBackgroundColor:[UIColor blackColor]];

[self.view addSubview:displayView];

UIView *keyboardView = [UIView new];

[self.view addSubview:keyboardView];

//先按1:3分割 displView(显示结果区域)和 keyboardView(键盘区域)

[displayView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(self.view.mas_top);

make.left.and.right.equalTo(self.view);

make.height.equalTo(keyboardView).multipliedBy(0.3f);

}];

[keyboardView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(displayView.mas_bottom);

make.bottom.equalTo(self.view.mas_bottom);

make.left.and.right.equalTo(self.view);

}];

//设置显示位置的数字为0

UILabel *displayNum = [[UILabel alloc]init];

[displayView addSubview:displayNum];

displayNum.text = @"0";

displayNum.font = [UIFont fontWithName:@"HeiTi SC" size:70];

displayNum.textColor = [UIColor whiteColor];

displayNum.textAlignment = NSTextAlignmentRight;

[displayNum mas_makeConstraints:^(MASConstraintMaker *make) {

// make.left.and.right.equalTo(displayView).with.offset(-10);

// make.right.equalTo(displayView).with.offset(-10);

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

make.bottom.equalTo(displayView).with.offset(-10);

}];

//定义键盘键名称,?号代表合并的单元格

NSArray *keys = @[@"AC",@"+/-",@"%",@"÷"

,@"7",@"8",@"9",@"x"

,@"4",@"5",@"6",@"-"

,@"1",@"2",@"3",@"+"

,@"0",@"?",@".",@"="];

int indexOfKeys = 0;

for (NSString *key in keys){

//循环所有键

indexOfKeys++;

int rowNum = indexOfKeys %4 ==0? indexOfKeys/4:indexOfKeys/4 +1;

int colNum = indexOfKeys %4 ==0? 4 :indexOfKeys %4;

NSLog(@"index is:%d and row:%d,col:%d",indexOfKeys,rowNum,colNum);

//键样式

UIButton *keyView = [UIButton buttonWithType:UIButtonTypeCustom];

[keyboardView addSubview:keyView];

[keyView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[keyView setTitle:key forState:UIControlStateNormal];

[keyView.layer setBorderWidth:1];

[keyView.layer setBorderColor:[[UIColor blackColor]CGColor]];

[keyView.titleLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:30]];

//键约束

[keyView mas_makeConstraints:^(MASConstraintMaker *make) {

//处理 0 合并单元格

if([key isEqualToString:@"0"] || [key isEqualToString:@"?"] ){

if([key isEqualToString:@"0"]){

[keyView mas_makeConstraints:^(MASConstraintMaker *make) {

make.height.equalTo(keyboardView.mas_height).with.multipliedBy(.2f);

make.width.equalTo(keyboardView.mas_width).multipliedBy(.5);

make.left.equalTo(keyboardView.mas_left);

make.baseline.equalTo(keyboardView.mas_baseline).with.multipliedBy(.9f);

}];

}if([key isEqualToString:@"?"]){

[keyView removeFromSuperview];

}

}

//正常的单元格

else{

make.width.equalTo(keyboardView.mas_width).with.multipliedBy(.25f);

make.height.equalTo(keyboardView.mas_height).with.multipliedBy(.2f);

//按照行和列添加约束,这里添加行约束

switch (rowNum) {

case 1:

{

make.baseline.equalTo(keyboardView.mas_baseline).with.multipliedBy(.1f);

keyView.backgroundColor = [UIColor colorWithRed:205 green:205 blue:205 alpha:1];

}

break;

case 2:

{

make.baseline.equalTo(keyboardView.mas_baseline).with.multipliedBy(.3f);

}

break;

case 3:

{

make.baseline.equalTo(keyboardView.mas_baseline).with.multipliedBy(.5f);

}

break;

case 4:

{

make.baseline.equalTo(keyboardView.mas_baseline).with.multipliedBy(.7f);

}

break;

case 5:

{

make.baseline.equalTo(keyboardView.mas_baseline).with.multipliedBy(.9f);

}

break;

default:

break;

}

//按照行和列添加约束,这里添加列约束

switch (colNum) {

case 1:

{

make.left.equalTo(keyboardView.mas_left);

}

break;

case 2:

{

make.right.equalTo(keyboardView.mas_centerX);

}

break;

case 3:

{

make.left.equalTo(keyboardView.mas_centerX);

}

break;

case 4:

{

make.right.equalTo(keyboardView.mas_right);

[keyView setBackgroundColor:[UIColor colorWithRed:243 green:127 blue:38 alpha:1]];

}

break;

default:

break;

}

}

}];

}

}

本例子使用的baseline去控制高度位置,这似乎不是太准,如果想要精准控制高度位置,可以使用一行一行添加的方法,每次当前行的top去equelTo上一行的bottom。 给个提示:

for(遍历所有行)

for(遍历所以列)

//当前行约束根据上一行去设置

IOS自适应库---- Masonry的使用的更多相关文章

  1. iOS 第三方库、插件、知名博客总结

    iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...

  2. 快快快!27个提升效率的iOS开源库推荐

    文章来源:http://www.csdn.net/article/2015-07-21/2825264-27-ios-open-source-libraries/1 我热爱开源,更喜爱那些花费宝贵的业 ...

  3. iOS适配:Masonry介绍与使用实践:快速上手Autolayout

    随着iPhone的手机版本越来越多, 那么对于我们广大的开发者来说就是很悲催,之前一直使用代码里面layout的约束来适配, 现在推荐一个第三方Masonry,上手块,操作简单,只能一个字形容他 “爽 ...

  4. iOS — Autolayout之Masonry解读

    前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时 ...

  5. 快快快!27个提升效率的iOS开源库推荐(转)

    CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用.开发工具.移动游戏及引擎.智能硬件.物联网等方方面面.如果您想投稿.参与内容翻译工作,或寻求近匠报道,请发送 ...

  6. iOS - 静态库的创建与使用

    在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来 ...

  7. IOS静态库

    如何在Xcode中创建C++静态库 http://jingyan.baidu.com/article/03b2f78c111fca5ea237ae26.html iOS 如何创建和使用静态库 http ...

  8. 封装ios静态库碰到的一些问题(一)

    封装IOS动态库,碰到的第一个问题,就是资源文件的问题,如果将你的程序封装成为静态库,那么静态库中不会包含资源文件和xib文件,这个时候就需要自己封装bundle文件了,而笔者开发环境默认是xcode ...

  9. fir.im Weekly - 热门 iOS 第三方库大盘点

    本期 fir.im Weekly 收集的热度资源,大部分关于Android.iOS 开发工具.源码和脑洞大开的 UI 动画,希望给你带来更多的工作创意与灵感. 盘点国内程序员不常用的热门iOS第三方库 ...

随机推荐

  1. Combination Sum,Combination Sum II,Combination Sum III

    39. Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique co ...

  2. C#代码设置窗体和Panel的位置大小

    1.设置Panel位置大小 private void button2_Click(object sender, EventArgs e) { panel1.Visible = false; panel ...

  3. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...

  4. hadoop中datanode无法启动

    一.问题描述 当我多次格式化文件系统时,如 [hadoop@xsh hadoop]$ ./bin/hdfs namenode -format 会出现datanode无法启动,查看日志(/usr/loc ...

  5. php给一张图片加上水印效果

    <?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文字 * $size 文字大小 * $pos 水印的位置 * $color 文字的颜色 * $f ...

  6. python中的 json 模块使用

    (1)python 中生成 json 字符串: import json data = dict(ret=0, msg="Welcome, Login success!") json ...

  7. centos在安装apache2.4版本的时候遇到ARP not found解决办法

    今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...

  8. Scala学习笔记--集合类型Queue,Set

    补充知识:http://www.importnew.com/4543.html 正文开始 scala.collection.immutable scala.collection.mutable 队列Q ...

  9. IQC IPQC FQC OQC QA QE SQE CQS QM 简介区别

    IQC Incoming quality control 来料质量控制.是企业产品过程质量的第一关,在这个部门工作的同事最主要的是要注意文件和资料,即:图纸 样品承认书 样板 ***配件检验规范 ,还 ...

  10. uva 10401 Injured Queen Problem(dp)

    题目链接:10401 - Injured Queen Problem 题目大意:给出一个字符串,要求在n * n(n为字符串的长度)的棋盘上摆放n个受伤的皇后,受伤的皇后只能攻击到同一列和它周围8个格 ...