• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > 关于Masonry框架AutoLayout的用法--面向初学者

关于Masonry框架AutoLayout的用法--面向初学者

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了masonry,masonry是什么意思,ios masonry,masonry unit,masonry.js等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于Masonry框架AutoLayout的用法--面向初学者
描述:

本帖最后由 weiyunmis 于 2016-07-23 19:01:08 编辑

MasonryAutoLayout自动布局

 Masonry作为目前较为流行的自动布局第三方框架,简单易用,大大减少了程序员花在UI布局和屏幕适配的精力与时间。
1 基本用法
1.1 事例1:
 关于Masonry框架AutoLayout的用法--面向初学者
图1-1
// ps: 无图莫看
// 首先是view1自动布局
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    // view1左边与superView左边对齐
    make.left.equalTo(superView.as_left);
    // view1右边与superView右边对齐.
    make.right.equalTo(superView.as_right);
 /* 这两句代码约束了view1的左边与右边,等价于约束了view1的宽
    度,宽度与superView的宽度相等,superView宽度变了,view1宽度也
    更着改变*/
    // viewe1上边于superView上边对齐

    make.top.equalTo(superView.mas_top); 
    // view1高度固定为44,等于一个数时用mas_equalTo();
    make.height.mas_equalTo(44);
    /* 到这里view1布局完成,它的origin(位置:x,y)和size(尺寸:
    width,height)都确定了,实际上就是view1的frame确定了。*/

}];
    /* 任意一个UIView的布局都需要确定位置和尺寸:x和y, width和
    height,缺一不可。下面是view2的布局 */

[view2 mas_makeConstraints:^(MASConstraintMaker *make) {
    // view2左边与view1左边对齐,即x确定,也可以与superView对齐
    make.left.equalTo(view1.mas_left);
    // view1宽度固定为90,即width确定。
    make.width.mas_equalTo(90);
    // 这里view2的高度与view1的高度相等,即height确定.
    make.height.equalTo(view1.mas_height); 
    // 底边与superView底边对齐,结合高度约束,y确定。
    make.bottom.equalTo(superView.mas_bottom); 
}];
/* x,y既可以通过left,top直接确定,也可以通right结合width,bottom
结合height间接确定 ,width和height通过mas_equalTo()直接确定以及
通过equalTo(view)依赖view的宽高间接确定 */

1.2 事例2:
 关于Masonry框架AutoLayout的用法--面向初学者
图1-2
 [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    // 与superView左边对齐,x确定。
    make.left.equalTo(superView.as_left);
    // 与superView上边对齐,y确定。
    make.top.equalTo(superView.mas_top); 
    // view1宽度固定为90,width确定。
    make.width.mas_equalTo(90);
    // view1高度height未确定。
}];
//view2布局,假设双箭头( 间距 )为20;
[view2 mas_makeConstraints:^(MASConstraintMaker *make) {
    /* view2的左边与superView左边+一个数对齐,从这里换个说法
    ,view2的左边等于superView的左边加上一个间距,x确定。*/

    make.left.equalTo(superView.mas_left).offset(20)
    // view2的底边等于superView底边。
    make.bottom.equalTo(superView.as_bottom);
    // view2的尺寸等于view1的尺寸(高度和宽度),size(width,height)确定
    make.size.equalTo(view1);
    /* 上面一句等价于make.height.width.equalTo(view1); */
 
    // view2的顶边等于view1的底边加上间距,结合高度约束,y确定。

    make.top.equalTo(view1.mas_bottom).offset(20)
    /* 四个要素确定,约束完成,view2的宽高度与view1的宽高度相同,
    由于两者没有。固定高度,只有固定的间距,故view1和view2的高度
    会随着superView的高度变化而变化。*/

}];
//啰嗦下坐标
 关于Masonry框架AutoLayout的用法--面向初学者
图1-3
//view3布局,假设间距为20。
[view3 mas_makeConstraints:^(MASConstraintMaker *make) {
    /* 从图中看出右边最好确定,右边等于superView的右边加上间距 */
    make.right.equalTo(superView.mas_right).offset(-20);
    // 坐标计算: 往左-20,往右+20。
    // view3的顶边等于superView顶边加一个间距
    make.top.equalTo(superView.mas_top).offset(20); //往上-20, 往下+20
    // view3的底边等于superView的底边加上一个间距。
    make.bottom.equalTo(superView.mas_bottom).offset(-20)
    // 到这里view3的高度确定,但宽度和x,y都尚未确定
    // view3宽度确定后结合right约束x跟着确定
    make.width.mas_equalTo(90);
    /* 剩下y未确定,从图中可以看出view3在superView中应该是垂
    直方向上居中,可以直接设置centerY */

    make.centerY.equalTo(superView.mas_centerY);
    /* 无论superView高宽怎么变化,view3始终在垂直方向上居中,
    且紧挨着superView右侧,高度会随着superView变化而变化,当
    然,你也可以直接固定高度,顶边与底边就不用在设置了,这样,
    superView高度变大变小,view3始终那么高,如何选择肯定是跟
    UI界面需求有关 */

}];
/* 这部分主要介绍了基本用法, top, bottom, left, right, centerY(相应的有
centerX), equalTo(), mas_equalTo(), offset() */
 
2 注意事项
2.1 问题
(1)  view 进行布局了但没有效果
1)  view为空,相当于给空指针发送消息,没有作用。
2)  布局依赖的UIView(如superView,view2)没有布局好.(说明:
    make.equalTo(view2),view2为依赖的UIView).
3)  view 本身没有显示什么东西
4)  view 没有添加到superView
5)  等等。。。。。。。
(2)  约束过多相悖或缺少    
  关于Masonry框架AutoLayout的用法--面向初学者
(3)程序崩溃,一般是约束依赖的对象(如superView)为空
 关于Masonry框架AutoLayout的用法--面向初学者
2.2 综合解决方法
设置view的背景以便观察,辅以View UI Hierarchy观测.
最直接有效的方法是在当前界面的第一个自动布局的view处打上断点,一行一行往下走( step over ),若
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 制作的framework项目含masonry,如何处理避免冲突
  • Masonry循环创建一竖列button如何实现
  • oc如何获得用Masonry约束好的宽度?
  • (swift)关于Masonry为什么不会造成循环引用的问题
  • iOS开发,使用masonry布局,如何让控件动态调整布局???e
  • iphone使用Masonry之后,如何检查自己的Autolayout布局是否正确?
  • iOS开发中-->关于使用Masonry去自适应ScrollView滚动视图内容的一些疑问!!!
  • 关于Masonry框架AutoLayout的用法--面向初学者
  • iOS开发使用Masonry布局如何让父视图的高度随着子视图的变化而变化?

相关文章

  • 2017-06-05 问题背后的问题读后感iosloading问题
  • 2017-06-05 iOS基础控件iOS关于存贮的小问题
  • 2017-06-05 ios-NSNotification(不是KVO)的实现原理是什么?
  • 2017-06-05 如何高效的准确的获取一个工程所有控制器的viewdidload方法的执行时间?
  • 2017-06-05 NSDictionary调用writeToFile出错
  • 2017-06-05 苹果ios系统如何获取iOS系统相册绝对路径
  • 2017-06-05 app获取ios相册的图片
  • 2017-06-05 m3u8关于IOS播放M3U8列表文件的疑问
  • 2017-06-05 OC求大神解决BUG,困惑几天了。
  • 2017-06-05 新浪微博开放平台以及腾讯开发平台的AppleID。

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift(swift)求助,这个交互怎么做?
    • ipad屏幕旋转IPAD屏幕旋转不了
    • iOS蓝牙后台扫描
    • swift元组,闭包的一些问题?
    • 当UIView正在做动画时,如何获取UIView的frame?
    • UIAlertController的Action事件反应有点慢?
    • iOS如何判断一个点在一个使用CAShapeLayer绘制出的圆弧内
    • 快用苹果助手怎么用iOSweex怎么用?
    • 通知传值刷新页面
    • 研讨会通知收到通知后点击通知会执行哪个方法?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有