您的位置:1010cc时时彩经典版 > 操作系统 > 1010cc时时彩经典版:Masonry基础介绍,IOS开垦连串

1010cc时时彩经典版:Masonry基础介绍,IOS开垦连串

发布时间:2019-08-11 17:52编辑:操作系统浏览(183)

    开撸

    1.居中浮现二个View,并能时刻保持比显示屏的宽和高少60像素

    UIView *view1=[[UIView alloc]init];
    
    view1.backgroundColor=[UIColor brownColor];
    
    [self.view addSubview:view1];
    
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view);
        make.top.equalTo(self.view).with.offset(30);
        make.left.equalTo(self.view).with.offset(30);
        make.bottom.equalTo(self.view).with.offset(-30);
        make.right.equalTo(self.view).with.offset(-30);
    }];
    

    1010cc时时彩经典版 1

    此间须求小心的是:控件用梅森ry约束的时候必须先将控件用addSubview加载到父视图中才具拓展约束,不然就能导致崩溃。

    Masonry中有多少个函数

    (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

    mas_makeConstraints 只肩负扩大约束,当对同一个控件三回调用这些函数就能够形成崩溃。< 喎?" target="_blank" class="keylink">vcD4NCjxwPm1hc191cGRhdGVDb25zdHJhaW50cyC4/NDC1LzK KOs08NtYXNfbWFrZUNvbnN0cmFpbnRztqjS5dS8yvjWrrrzo6y/ydLU08O4/NDC1LzK L340NCyubPkPC9wPg0KPHA bWFzX3JlbWFrZUNvbnN0cmFpbnRzINf308OxyL3PsNS1wKOsyb6z/daux7C21LjDv9i8/rTm1Nq1xMv509DUvMr4o6zWu7GjwfRibG9ja7qvyv3A78PmtcTX7tDC1LzK KGjPGJyIC8 DQrJz8PmtcQ8L3A DQo8cHJlIGNsYXNzPQ=="brush:java;"> make.center.equalTo(self.view); make.top.equalTo(self.view).with.offset(30); make.left.equalTo(self.view).with.offset(30); make.bottom.equalTo(self.view).with.offset(-30); make.right.equalTo(self.view).with.offset(-30);

    你是否想更优雅,更棒一点啊?能够如此:

    UIEdgeInsets padding = UIEdgeInsetsMake(30, 30, -30, -30);
     make.center.equalTo(self.view);
    
     make.top.equalTo(self.view).with.offset(padding.top);
    
     make.left.equalTo(self.view).with.offset(padding.left);
    
     make.bottom.equalTo(self.view).with.offset(padding.bottom);
    
      make.right.equalTo(self.view).with.offset(padding.right); 
    

    我们还足以简化为

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

    也能够那样:

      make.top.left.bottom.and.right.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10)); 
    

    ) 前言 中兴5在此以前大家对采取布局停留在3.5寸多个显示器的级差,当时的安卓土冒们是何其的向往iOS开拓,不会被大批量...

    mas_makeConstraints 只肩负新扩张约束 Autolayout无法并且存在两条针对于一致对象的束缚 不然会报错

    Cocoapods篇


    1.安装Cocoapods

    2.使用Cocoapods导入Masonry

          pod search Masonry  //搜索

           vim Podfile             //配置Pod

           pod install            //依附Podfile导入第三方库到花色

    选拔Cocoapods导入Masonry后项目图层:

    1010cc时时彩经典版 2

    CocoaPods安装和动用教程

    7

    1.3.1在TableCell单元格中不可能使用Masonry

    在TableCell中扩大子控件时,不能符合规律使用Masonry来举办布局,大概是Cell重用引起的。

    采用表明

    使用参数成效表达表

    1010cc时时彩经典版 3

    上述是纯手写代码所经历的有关页面布局的三个时代

    Masonry篇


    在上文导入Masonry之后我们就足以用其优雅简明的化解autolayout

    - (void)setUI

    {

    UILabel * label = [UILabel new];

    label.text = @"apns(jspush),cocopods,masory";

    label.textColor = [UIColor blueColor];

    label.numberOfLines = 0;

    [self.view addSubview:label];

    //使用autoLayout在此之前 必要先将view增添到superview上 不然会报错

    [label mas_makeConstraints:^(MASConstraintMaker *make) {

    make.center.equalTo(self.view);//居中

    make.size.mas_equalTo(CGSizeMake(200, 50));//设置label的size

    }];

    label = nil;}

    俩大特征:

                1.dot语法的书写格式

    *            2.一个block消除所不正常*

    多少个函数:

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

    /mas_makeConstraints 只担当新扩大约束 Autolayout无法而且存在两条针对于一致对象的束缚 不然会报错**/

    - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;

    /*mas_updateConstraints 本着地点的意况 会更新在block中冒出的约束 不会导致出现五个同样约束的场所/*

    - (NSArray *)mas_remakeConstraints:(void(^) (MASConstraintMaker *make))block;

    /mas_remakeConstraints 则会去掉此前的享有约束 仅保留最新的自律**/

    Masonry介绍与行使举行:急忙上手Autolayout - CocoaChina_让活动支付更简明 

    92

    1.2.1更新layout

    简介

    正因为上边说的那样,荧屏的尺寸逐步加多,还沿用从前的办法布局明显是不行的,那时候为布局引入新的结局办法NSAutoLayout,但苹果提供的比较复杂麻烦,所以就有人在此基础上进行李包裹装,而提供一种高效的框架—-Masonary

    在iphone1-iphone3gs时期 window的size固定为(320,480) 大家只须要轻松总括一下相持地点就好了

    Apns(jspush)篇


    用途:

              轻易狠毒的将一定的音讯推送到一定的无绳话机上

    基本原理

               Provider —> APNS—>Your’s APP

    APNS通过 provider 与device 创设connection信任与和token信任来确认保证通信可行,安全,可信

    Token Generation and Dispersal:

    1.app 向system注册远程文告,然后system发送request给APNS

    2.APNS重回一个无比的device token给device,然后system经过管理把其传递给APP

    3.App将device token 以2进制也许16进制的格式发给your’provider

    小心 device token 并非不改变的,当系统晋级,或app重装都会改造

    骨子里利用(以极光推送sample)

          1.去开辟者中央安插对应APPID ,推送证书[发开与生产Total:2个],PP文件

    *      2.基于极光官方文书档案集成SDK*

    *      3.测试*

    测试图

    1010cc时时彩经典版 4

    iOS SDK 概述 - 极光文书档案 

    Apple Push Notification Service 

    DEMO代码:zhou_jay_jay/an-Hour - 码云 - 开源中华人民共和国

    UIView*sv21 = [UIViewnew];

    1.2.1.3代码示例

    [_loginButtonmas_remakeConstraints:^(MASConstraintMaker*make) {

    make.width.equalTo(weakSelf.loginNameTextField.mas_width);

    make.height.equalTo(weakSelf.loginNameTextField.mas_height);

    make.centerX.mas_equalTo(weakSelf.loginContainerView.mas_centerX);

    if(_loginVerifyImageCodeTextField) {

    make.top.equalTo(weakSelf.loginVerifyImageCodeTextField.mas_bottom).with.offset(20);

    }

    }];

    [_loginDescLabelmas_updateConstraints:^(MASConstraintMaker*make) {

    make.top.equalTo(weakSelf.loginButton.mas_bottom).with.offset(5);

    }];

    前言

    索尼爱立信5从前大家对使用布局停留在3.5寸贰个显示器的等级,当时的安卓土冒们是何等的艳羡iOS开采,不会被大量的荧屏适配所烦恼。随着Motorola产品的迭代,慢慢出现4寸、4.7寸、5.5寸….,你们说,iphone10 会有微微寸?O(∩_∩)O~

    @property (nonatomic, strong, readonly) MASConstraint *leading;  首部

    }];

    1.2高端开采手艺

    安装

    怎样设置框架?依旧提议用CocoaPods,这里有自家前面写的CocoaPods相关用法

             pod 'Masonry'
    

    }];

    UIView*obj = views[i];

    1.3.3竭尽直接用equalTo,而不用mas_equalTo

    mas_equalTo供给等控件自己布局造成了随后才具调用,而equalTo无需。因而开始展览子视图布局时,用后边一个轻易挂机。

    iOS自适应布局之Masonry(一)

    @property (nonatomic, strong, readonly) MASConstraint *centerY; 纵向主题

    }];

    1.1.4[中级]在UIScrollView顺序排列一些view并自行估测计算contentSize

    UIScrollView *scrollView = [UIScrollViewnew];

    scrollView.backgroundColor = [UIColor whiteColor];

    [sv addSubview:scrollView];

    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {

    make.edges.equalTo(sv).with.insets(UIEdgeInsetsMake(5,5,5,5));

    }];

    UIView *container = [UIViewnew];

    [scrollView addSubview:container];

    [container mas_makeConstraints:^(MASConstraintMaker *make) {

    make.edges.equalTo(scrollView);

    make.width.equalTo(scrollView);

    }];

    int count = 10;

    UIView *lastView = nil;

    for( int i = 1 ; i <= count ; i )

    {

    UIView *subv = [UIViewnew];

    [container addSubview:subv];

    subv.backgroundColor = [UIColor colorWithHue:( arc4random() % 256 / 256.0 )

    saturation:( arc4random() % 128 / 256.0 ) 0.5

    brightness:( arc4random() % 128 / 256.0 ) 0.5

    alpha:1];

    [subv mas_makeConstraints:^(MASConstraintMaker *make) {

    make.left.and.right.equalTo(container);

    make.height.mas_equalTo(@(20*i));

    if( lastView )

    {

    make.top.mas_equalTo(lastView.mas_bottom);

    }

    else

    {

    make.top.mas_equalTo(container.mas_top);

    }

    }];

    lastView = subv;

    }

    [container mas_makeConstraints:^(MASConstraintMaker *make) {

    make.bottom.equalTo(lastView.mas_bottom);

    }];

    底部效果

    尾巴部分效劳

    从scrollView的scrollIndicator能够看来scrollView的中间已如作者辈所想排列好了

    那边的基本点就在于container那几个view起到了多个中间层的成功效够活动的总结uiscrollView的contentSize

    @property (nonatomic, strong, readonly) MASConstraint *right;  右侧

    3

    1.3.2施用了Masonry布局的控件最棒手动释放内部存款和储蓄器,若有应用软件自动释放内部存款和储蓄器,会有延迟,导致页面布局退步

    //须求手动释放mas_makeConstraints的内部存款和储蓄器,若有应用程式自动释放内部存款和储蓄器,会有延期,导致页面布局失利

    _loginNameTextField=nil;

    _loginVerifyCodeGetButton=nil;

    _loginVerifyCodeTextField=nil;

    前言

    4

    1.3.4使用dispatch_get_main_queue保险布局与承继管理的共同

    虽然mas_updateConstraints的block回调是种种推行的,可是布局真正起效果照旧放在了main_queue的下叁个runloop中试行的,所以假若要在布局产生后逐条实施某个管理(举例开头实行自定义绘制大概异步绘制),最佳手动放到main_queue的下三个runloop中执行,确认保障布局产生后才起来奉行代码。

    正如是自己要作为模范服从规则代码:

    -(void)draw

    {

    [selfsetLayout];

    //因为Layout库是异步的,为了确定保证施行各类上的同步,供给作此管理

    dispatch_async(dispatch_get_main_queue(), ^{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

    CGRectdrawFrame =CGRectMake(0,0,SCREEN_BOUNDS.size.width,_headerHeight);

    UIGraphicsBeginImageContextWithOptions(drawFrame.size,YES,0);

    CGContextRefcontext =UIGraphicsGetCurrentContext();

    if(!context) {

    return;

    }

    [[UIColorwhiteColor]set];

    CGContextFillRect(context,drawFrame);

    [_separationLineViewdrawRect:CGRectMake(0,0,

    drawFrame.size.width,_lineHeight)];

    [_iconButtondrawRect:_iconButton.frame];

    [_nameButtondrawRect:_nameButton.frame];

    [_postDateLabeldrawRect:_postDateLabel.frame];

    UIImage*tempImage =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    dispatch_async(dispatch_get_main_queue(),^{

    //_postContentTextImageView.frame= _postContentTextView.frame;//textViewRect;//

    [_iconButtonsetHidden:NO];

    [_nameButtonsetHidden:NO];

    [_postDateLabelsetHidden:NO];

    _bgImageView.image=nil;

    _bgImageView.image=tempImage;

    });

    });

    });

    }

    @property (nonatomic, strong, readonly) MASConstraint *trailing; 尾部

    57

    1.3左近问题

    透过链式的自然语言 就把view1给autolayout好了 是还是不是回顾易懂?

    17

    1.2.1.2mas_remakeConstraints

    mas_remakeConstraints与mas_updateConstraints比较一般,都以翻新constraint。不过,mas_remakeConstraints是删除从前constraint,然后再增多新的constraint(适用于运动动画);而mas_updateConstraints只是创新constraint的值。

    @property (nonatomic, strong, readonly) MASConstraint *top;  上侧

    33

    1.1.5[高级]横向可能纵向等空闲的排列一组view

    很缺憾autoLayout并不曾一贯提供等空闲排列的艺术(Masonry的官方demo中也尚未相应的案例)可是参考案例3大家能够透过二个小技术来促成这些指标为此作者写了一个Category

    @implementation UIView(Masonry_LJC)

    - (void) distributeSpacingHorizontallyWith:(NSArray*)views

    {

    NSMutableArray *spaces = [NSMutableArray arrayWithCapacity:views.count 1];

    for( int i = 0 ; i < views.count 1 ; i )

    {

    UIView *v = [UIViewnew];

    [spaces addObject:v];

    [self addSubview:v];

    [v mas_makeConstraints:^(MASConstraintMaker *make) {

    make.width.equalTo(v.mas_height);

    }];

    }

    UIView *v0 = spaces[0];

    __weak __typeof(&*self)ws = self;

    [v0 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.left.equalTo(ws.mas_left);

    make.centerY.equalTo(((UIView*)views[0]).mas_centerY);

    }];

    UIView *lastSpace = v0;

    for( int i = 0 ; i < views.count; i )

    {

    UIView *obj = views[i];

    UIView *space = spaces[i 1];

    [obj mas_makeConstraints:^(MASConstraintMaker *make) {

    make.left.equalTo(lastSpace.mas_right);

    }];

    [space mas_makeConstraints:^(MASConstraintMaker *make) {

    make.left.equalTo(obj.mas_right);

    make.centerY.equalTo(obj.mas_centerY);

    make.width.equalTo(v0);

    }];

    lastSpace = space;

    }

    [lastSpace mas_makeConstraints:^(MASConstraintMaker *make) {

    make.right.equalTo(ws.mas_right);

    }];

    }

    - (void) distributeSpacingVerticallyWith:(NSArray*)views

    {

    NSMutableArray *spaces = [NSMutableArray arrayWithCapacity:views.count 1];

    for( int i = 0 ; i < views.count 1 ; i )

    {

    UIView *v = [UIViewnew];

    [spaces addObject:v];

    [self addSubview:v];

    [v mas_makeConstraints:^(MASConstraintMaker *make) {

    make.width.equalTo(v.mas_height);

    }];

    }

    UIView *v0 = spaces[0];

    __weak __typeof(&*self)ws = self;

    [v0 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.top.equalTo(ws.mas_top);

    make.centerX.equalTo(((UIView*)views[0]).mas_centerX);

    }];

    UIView *lastSpace = v0;

    for( int i = 0 ; i < views.count; i )

    {

    UIView *obj = views[i];

    UIView *space = spaces[i 1];

    [obj mas_makeConstraints:^(MASConstraintMaker *make) {

    make.top.equalTo(lastSpace.mas_bottom);

    }];

    [space mas_makeConstraints:^(MASConstraintMaker *make) {

    make.top.equalTo(obj.mas_bottom);

    make.centerX.equalTo(obj.mas_centerX);

    make.height.equalTo(v0);

    }];

    lastSpace = space;

    }

    [lastSpace mas_makeConstraints:^(MASConstraintMaker *make) {

    make.bottom.equalTo(ws.mas_bottom);

    }];

    }

    @end

    简易的来测量试验一下

    UIView *sv11 = [UIViewnew];

    UIView *sv12 = [UIViewnew];

    UIView *sv13 = [UIViewnew];

    UIView *sv21 = [UIViewnew];

    UIView *sv31 = [UIViewnew];

    sv11.backgroundColor = [UIColor redColor];

    sv12.backgroundColor = [UIColor redColor];

    sv13.backgroundColor = [UIColor redColor];

    sv21.backgroundColor = [UIColor redColor];

    sv31.backgroundColor = [UIColor redColor];

    [sv addSubview:sv11];

    [sv addSubview:sv12];

    [sv addSubview:sv13];

    [sv addSubview:sv21];

    [sv addSubview:sv31];

    //给予差别的尺寸测量检验效果

    [sv11 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.centerY.equalTo(@[sv12,sv13]);

    make.centerX.equalTo(@[sv21,sv31]);

    make.size.mas_equalTo(CGSizeMake(40, 40));

    }];

    [sv12 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.size.mas_equalTo(CGSizeMake(70, 20));

    }];

    [sv13 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.size.mas_equalTo(CGSizeMake(50, 50));

    }];

    [sv21 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.size.mas_equalTo(CGSizeMake(50, 20));

    }];

    [sv31 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.size.mas_equalTo(CGSizeMake(40, 60));

    }];

    [sv distributeSpacingHorizontallyWith:@[sv11,sv12,sv13]];

    [sv distributeSpacingVerticallyWith:@[sv11,sv21,sv31]];

    [sv showPlaceHolderWithAllSubviews];

    [sv hidePlaceHolder];

    代码效果

    perfect!简洁明了的直达了我们所要的意义

    mas_remakeConstraints 则会免去此前的具备约束 仅保留最新的约束

    }];

    1.1简便利用技艺

    mas_updateConstraints 本着地方的气象 会更新在block中出现的约束 不会形成出现三个同样约束的图景

    6

    Masonry手写Autolayout专题

    Masonry介绍与利用进行:快捷上手Autolayout

    http://www.cocoachina.com/ios/20141219/10702.html

    MagicNumber -> autoresizingMask -> autolayout

    6

    2参阅链接

    实时显示iOS编写UI代码效果

    http://blog.csdn.net/zhang_red/article/details/45503683

    - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;

    5

    1Masonry费用技能

    那怎么高效的上手autolayout呢? 说实话 当年ios6出产的还要新扩张了autolayout的性状 作者看了弹指间法定文书档案和demo 就随即放弃到一头了 因为实际过于的繁琐和啰嗦(有过经验的意中人确定有同感)

    1010cc时时彩经典版 5

    1.2.1.1mas_updateConstraints

    采纳Masonry创立constraint来定义布局的艺术有三种:mas_makeConstraints,mas_updateConstraints,mas_remakeConstraints。

    不经常你必要更新constraint(举例,动画和调节和测量试验)并不是创造固定constraint,能够应用mas_updateConstraints方法。

    - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

    - (NSArray*)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;

    1.1.3[初级]让多个惊人为150的view垂直居中且等宽且等间隔排列间隔为10(自动测算其上升的幅度)

    int padding1 = 10;

    [sv2 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.centerY.mas_equalTo(sv.mas_centerY);

    make.left.equalTo(sv.mas_left).with.offset(padding1);

    make.right.equalTo(sv3.mas_left).with.offset(-padding1);

    make.height.mas_equalTo(@150);

    make.width.equalTo(sv3);

    }];

    [sv3 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.centerY.mas_equalTo(sv.mas_centerY);

    make.left.equalTo(sv2.mas_right).with.offset(padding1);

    make.right.equalTo(sv.mas_right).with.offset(-padding1);

    make.height.mas_equalTo(@150);

    make.width.equalTo(sv2);

    }];

    代码效果

    此处大家在三个子view之间相互设置的束缚能够观察她们的增长幅度在约束下活动的被计算出来了

    作者们先来看一段官方的sample code来认知一下Masonry

    40

    1.1.1[基础]从中彰显贰个view

    - (void)viewDidLoad

    {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

    WS(ws);

    UIView *sv = [UIViewnew];

    [sv showPlaceHolder];

    sv.backgroundColor = [UIColor blackColor];

    [self.view addSubview:sv];

    [sv mas_makeConstraints:^(MASConstraintMaker *make) {

    make.center.equalTo(ws.view);

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

    }];

    }

    代码效果

    行使自家里面写的MMPlaceHolder能够看来superview已经依照我们预料居中何况设置成了方便的大大小小

    那么先看看这几行代码

    //从此以往基本得以扬弃CGRectMake了

    UIView *sv = [UIViewnew];

    //在做autoLayout此前必须要先将view加多到superview上再不会报错

    [self.view addSubview:sv];

    //mas_makeConstraints正是Masonry的autolayout加多函数将所需的羁绊增多到block中央银行了

    [sv mas_makeConstraints:^(MASConstraintMaker *make) {

    //将sv居中(很轻巧掌握啊?)

    make.center.equalTo(ws.view);

    //将size设置成(300,300)

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

    }];

    这里有八个难点要说爱他美(Aptamil)(Beingmate)下

    首先在Masonry中能够增多autolayout约束有四个函数

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

    - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;

    - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

    /*

    mas_makeConstraints只承担新扩大约束Autolayout无法何况存在两条针对于同一对象的牢笼否则会报错

    mas_updateConstraints针对地点的状态会更新在block中冒出的束缚不会招致出现五个一律约束的情景

    mas_remakeConstraints则会免去在此以前的富有约束仅保留最新的约束

    三种函数善加利用就能够回答各个状态了

    */

    其次equalTo和mas_equalTo的界别在何地啊?其实mas_equalTo是一个MACRO

    #define mas_equalTo(...)                 equalTo(MASBoxValue((__VA_ARGS__)))

    #define mas_greaterThanOrEqualTo(...)    greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))

    #define mas_lessThanOrEqualTo(...)       lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))

    #define mas_offset(...)                  valueOffset(MASBoxValue((__VA_ARGS__)))

    可以看看mas_equalTo只是对其参数进行了三个BOX操作(装箱) MASBoxValue的概念具体能够看看源代码太长就不贴出来了

    所协理的种类除了NSNumber援助的那些数值类型之外就只协理CGPoint CGSize UI艾德geInsets

    介绍完那多少个难题大家就一连往下了PS:刚才定义的sv会成为我们接下去全体sample的superView

    @property (nonatomic, strong, readonly) MASConstraint *bottom;  下侧

    6

    1.1.2[初级]让叁个view略小于其superView(边距为10)

    UIView *sv1 = [UIViewnew];

    [sv1 showPlaceHolder];

    sv1.backgroundColor = [UIColor redColor];

    [sv addSubview:sv1];

    [sv1 mas_makeConstraints:^(MASConstraintMaker *make) {

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

    /*等价于

    make.top.equalTo(sv).with.offset(10);

    make.left.equalTo(sv).with.offset(10);

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

    make.right.equalTo(sv).with.offset(-10);

    */

    /*约等于于

    make.top.left.bottom.and.right.equalTo(sv).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));

    */

    }];

    代码效果

    能够见见edges其实正是top,left,bottom,right的一个简化分开写也得以一句话更简便易行

    那么为啥bottom和right里的offset是负数呢?因为那边总结的是相对的数值总计的bottom须要小鱼sv的平底低度所以要-10同理用于right

    此地风趣的地点是and和with其实那多少个函数什么事情都没做

    - (MASConstraint *)with{

    returnself;

    }

    - (MASConstraint *)and {

    returnself;

    }

    可是用在这种链式语法中就那几个的高明和易懂不得不钦佩笔者的意念(纵然本身未来着力都会轻巧)

    @property (nonatomic, strong, readonly) MASConstraint *centerX; 横向中点

    11

    会见block里面包车型大巴那句话: make edges equalTo superview with insets

    make.left.equalTo(self.mas_left);

    两种函数善加利用 就可以回答各样意况了

    14

    在iphone6 时期 window的width也爆发了转换(绝对5和5s的显示器比例未有变动) 终于是时候放任autoresizingMask改用autolayout了(不用帮助ios5了 相对于显示屏适配的三种性来讲autoresizingMask也一度过时了)

    28

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

    sv1.backgroundColor= [UIColorredColor];

    看一下Masonry援救哪一部分性能

    - (MASConstraint *)with {

    @property (nonatomic, strong, readonly) MASConstraint *width; 宽

    46

    在iphone4-iphone4s时期 苹果推出了retina屏 不过给了码农们异常的大的有利:window的size不改变

    22

    @property (nonatomic, strong, readonly) MASConstraint *height; 高

    21

    Masonry是一个轻量级的布局框架 具有自个儿的汇报语法 选拔更优雅的链式语法封装自动布局 简洁明了 并富有高可读性 并且同期援助iOS 和 马克斯 OS X。

    UIScrollView*scrollView = [UIScrollViewnew];

    */

    3

    @property (nonatomic, strong, readonly) MASConstraint *left;   左侧

    }];

               make.edges.equalTo(superview).with.insets(padding);

    10

    /*

    如上是纯手写代码所经历的关于页面布局的多个时代

    @property (nonatomic, strong, readonly) MASConstraint *baseline 文本基线

    make.centerX.equalTo(((UIView*)views[0]).mas_centerX);

    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {

    10

    在iphone5-iphone5s时期 window的size变了(320,568) 那时autoresizingMask派上了用处(为什么那时候不用Autolayout? 因为还要支持ios5呗) 轻巧的适配一下就能够

    3

    在Masonry中能够增多autolayout约束有八个函数

    MagicNumber -> autoresizingMask -> autolayout

    使用

    在iphone1-iphone3gs时期 window的size固定为(320,480) 大家只必要轻松总括一前一周旋地方就好了

    介绍

    33

    widthNSLayoutAttributeWidth宽

    - (NSArray*)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

    10

    returnself;

    71

    mas_remakeConstraints 则会去掉从前的装有约束 仅保留最新的自律

    44

    18

    29

    }];

    17

    2

    经过上述5个案例 笔者认为已经把Masonry的常用成效介绍得几近了 以上七个例子的代码可以在这里找到设若你感觉意犹未尽呢 请下载官方的demo来读书

    [sv hidePlaceHolder];

    47

    10

    lastSpace = space;

    trailingNSLayoutAttributeTrailing尾部

    25

    大约的来测验一下

    上边 通过有个别简练的实例来大致介绍怎么样轻易欢乐的选取Masonry:

    23

    9

    @property(nonatomic,strong,readonly) MASConstraint *width;

    35

    Masonry是贰个轻量级的布局框架 具有自身的描述语法 采取更优雅的链式语法封装自动布局 简洁明了 并持有高可读性并且还要帮助 iOS 和 马克斯 OS X

    那正是说为啥bottom和right里的offset是负数呢? 因为此地计算的是相对的数值 计算的bottom必要小于sv的平底中度 所以要-10 同理用于right

    94

    41

    brightness:( arc4random() 8/256.0) 0.5

    }

    27

    12

    76

    29

    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {

    9

    [space mas_makeConstraints:^(MASConstraintMaker *make) {

    17

    68

    UIView*sv = [UIViewnew];

    19

    4

    8

    3

    10

    31

    make.width.equalTo(sv3);

    2

    14

    2

    在iphone6 时代 window的width也产生了变化(绝对5和5s的显示屏比例未有生成) 终于是时候抛弃autoresizingMask改用autolayout了(不用帮助ios5了 相对于显示屏适配的两种性来讲autoresizingMask也已经过时了)

    代码效果

    [sv showPlaceHolderWithAllSubviews];

    45

    make.width.equalTo(v.mas_height);

    15

    32

    我们先来看一段官方的sample code来认知一下Masonry

    [sv1 mas_makeConstraints:^(MASConstraintMaker *make) {

    在iphone5-iphone5s时代 window的size变了(320,568) 那时autoresizingMask派上了用途(为啥那时候不用Autolayout? 因为还要支撑ios5嘛) 轻易的适配一下就能够

    make.top.mas_equalTo(container.mas_top);

    54

    16

    1

    make.left.equalTo(sv2.mas_right).with.offset(padding1);

    - (NSArray*)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

    {

    36

    UIView*sv11 = [UIViewnew];

    [sv12 mas_makeConstraints:^(MASConstraintMaker *make) {

    8

    3

    15

    8

    1

    11

    9

    make.bottom.equalTo(self.mas_bottom);

    [subv mas_makeConstraints:^(MASConstraintMaker *make) {

    [selfaddSubview:v];

    5

    7

    本文由1010cc时时彩经典版发布于操作系统,转载请注明出处:1010cc时时彩经典版:Masonry基础介绍,IOS开垦连串

    关键词: