IOS自适配利器Masonry使用指南

2016-02-19 08:56 35 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐IOS自适配利器Masonry使用指南,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

关于iOS布局自动iPhone6之后就是AutoLayOut,AutoLayOut固然非常好用,不过有时候我们需要在页面手动进行页面布局,VFL算是一种选择,而且VFL不复杂,理解起来很容易,实际开发中用的特别熟还好,要是第一次看估计要花点功夫才能搞定。Masonry算是VFL的简化版,用的人比较多,之前项目中用过一次,对手动写页面的开发来说算是福利。

基础知识

首先我们看一个常见的问题将一个子View放在的UIViewController的某个位置,通过设置边距来实现,效果如下:

如果通过VFL我们代码会是这样的:

UIView *superview                               = self.view; UIView *view1                                   = [[UIView alloc] init];view1.translatesAutoresizingMaskIntoConstraints = NO;view1.backgroundColor                           = [UIColor redColor];[superview addSubview:view1]; UIEdgeInsets padding                            = UIEdgeInsetsMake(200, 50, 200, 50); [superview addConstraints:@[                             //约束                            [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeTop                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeTop                                                        multiplier:1.0                                                          constant:padding.top],                             [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeLeft                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeLeft                                                        multiplier:1.0                                                          constant:padding.left],                             [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeBottom                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeBottom                                                        multiplier:1.0                                                          constant:-padding.bottom],                             [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeRight                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeRight                                                        multiplier:1                                                          constant:-padding.right],                             ]];

只是简单的设置了一个边距,如果视图的关系比较复杂,维护起来会是一个很痛苦的事情,我们看一下Masonry是如何实现的,导入Masonry.h头文件,约束的代码:

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor redColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;UIEdgeInsets padding = UIEdgeInsetsMake(200, 50, 200, 50);[childView mas_makeConstraints:^(MASConstraintMaker *make) {    make.edges.equalTo(weakSelf.view).with.insets(padding);}];

通过mas_makeConstraints设置边距有种鸟枪换炮的感觉,我们即将开启一段新的旅程,可以紧接着看下面比较实用的功能~

实用知识

1.View设置大小

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor redColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {    //设置大小    make.size.mas_equalTo(CGSizeMake(100, 100));    //居中    make.center.equalTo(weakSelf.view);}];

效果如下:

  

这里友情其实一个小内容,目前我们设置约束都是通过mas_makeConstraints用来创建约束,mas_updateConstraints用来更新约束,mas_remakeConstraints重置约束,清除之前的约束,保留最新的约束,如果想深入解释下,可以阅读下面的英文解释~

/** *  Creates a MASConstraintMaker with the callee view. *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing * *  @param block scope within which you can build up the constraints which you wish to apply to the view. * *  @return Array of created MASConstraints */- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; /** *  Creates a MASConstraintMaker with the callee view. *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing. *  If an existing constraint exists then it will be updated instead. * *  @param block scope within which you can build up the constraints which you wish to apply to the view. * *  @return Array of created/updated MASConstraints */- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; /** *  Creates a MASConstraintMaker with the callee view. *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing. *  All constraints previously installed for the view will be removed. * *  @param block scope within which you can build up the constraints which you wish to apply to the view. * *  @return Array of created/updated MASConstraints */- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

2.设置高度,这里设置左右边距,因此不设置宽度,如果想单独设置width可参考高度的设置方式:

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {    //距离顶部44    make.top.equalTo(weakSelf.view.mas_top).with.offset(44);    //距离左边30    make.left.equalTo(weakSelf.view.mas_left).with.offset(30);    //距离右边30,注意是负数    make.right.equalTo(weakSelf.view.mas_right).with.offset(-30);    //高度150    make.height.mas_equalTo(@150);}];

3.子视图之间的位置设置:

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先将子View加入在父视图中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {    //距离顶部44    make.top.equalTo(weakSelf.view.mas_top).with.offset(44);    //距离左边30    make.left.equalTo(weakSelf.view.mas_left).with.offset(30);    //距离右边30,注意是负数    make.right.equalTo(weakSelf.view.mas_right).with.offset(-30);    //高度150    make.height.mas_equalTo(@150);}];//地址:http://www.cnblogs.com/xiaofeixiang/UIView *nextView=[UIView new];[nextView setBackgroundColor:[UIColor redColor]];[self.view addSubview:nextView];[nextView mas_makeConstraints:^(MASConstraintMaker *make) {    make.top.equalTo(childView.mas_bottom).with.offset(30);    make.right.equalTo(childView.mas_right).with.offset(-30);    make.width.mas_equalTo(@100);    make.height.mas_equalTo(@100);}];

4.链式写法,算是一个便利的写法:

    UIView  *childView=[UIView new];    [childView setBackgroundColor:[UIColor greenColor]];    //先将子View加入在父视图中    [self.view addSubview:childView];    __weak typeof(self) weakSelf = self;    [childView mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.and.left.mas_equalTo(weakSelf.view).with.offset(100);        make.bottom.and.right.mas_equalTo(weakSelf.view).with.offset(-100);        //第二种写法更简单,相对于就是父视图//        make.top.and.left.mas_equalTo(100);//        make.bottom.and.right.mas_equalTo(-100);    }];         UILabel *label=[UILabel new];    [label setText:@"博客园-FlyElephant"];    [label setTextColor:[UIColor redColor]];    [label setTextAlignment:NSTextAlignmentCenter];    [self.view addSubview:label];    [label mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.mas_equalTo(weakSelf.view).with.offset(10);        make.height.mas_equalTo(20);        make.right.mas_equalTo(weakSelf.view).with.offset(-10);        make.bottom.mas_equalTo(weakSelf.view).with.offset(-50);    }];

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 网上关于Masonry的教程很多,给的例子的也很多,这几种情况基本上满足了开发中的需求,不会有太多的出入,算是一个简易版的教程,Masonry的中属性和iOS中的属性是有对应的关系,不过因为很简单,基本上没怎么看,下图是一个对照关系:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

总结:

可以给控件添加left/right/top/bottom/size/height/width/insert约束; 库提供了三个方法,mas_makeConstraints添加约束,mas_updateConstraints修改约束,mas_remakeConstraints清除以前约束并添加新约束; 可以通过view.mas_bottom获得view的某个约束; 在约束的block中,使用make来给当前控件添加约束。

来源:http://www.tulaoshi.com/n/20160219/1588900.html

延伸阅读
标签: 电脑入门
工具/原料 驾考宝典电脑版 驾考宝典手机版(Android、iPhone、Symbian) 步骤/方法 设置车型,选择对应题库。 首次启动驾考宝典,可设置车型,小车、客车、货车专属题库。驾考宝典会根据车型自动选择题库,多种练习模式全方位覆盖考题。 图形化菜单面板,最新版全国标准题库。 驾考宝典采用交管局最新公布的考试题库,聚合了通用...
标签: 电脑入门
Linux系统的众多命令中,rm命令主要用于删除文件,下面图老师小编就来详解介绍下Linux系统的rm命令,希望对初学者有一定的帮助。 名称:rm 使用权限:所有使用者 使用方式:rm [options] name.。。 说明:删除档案及目录。 参数: -i 删除前逐一询问确认。 -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 -r 将目录及...
满月剃胎发陋习不足取 我国民间流传着满月剃胎发的风俗,认为孩子满月时用剃刀将胎发剃光可使婴儿头发长得浓密,甚至有人说剃得越光,将来头发就会越黑越多。南京市妇幼保健院的专家说,满月剃胎发不仅没有科学依据,这种陋习还有可能危及小生命的安全。    婴儿尤其是新生儿的皮肤屏障机制较差,而有些锋利的剃刀根本没有经过...
ACE自适配通信环境 撰文/Douglas C. Schmidt 翻译/马维达 一、ACE综述 ACE自适配通信环境(ADAPTIVE Communication Environment)是可自由使用、开放源码的面向对象(OO)构架(framework),它实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可重用C++包装外观(wrapper ...
1.Spotloight是什么? Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。 Demo演示 2.如何集成Spotlight a.添加所需要的框架 代码如下: #if __IPHONE...

经验教程

347

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部