Masonry 学习笔记

作者: 一铭_ | 来源:发表于2015-12-01 18:40 被阅读132次

一个轻量级的布局框架, 同时支持 iOS 和 Mac OS X, 采用更优雅的链式语法封装自动布局,语法优雅, 帮助开发者快速适配不同分辨率的 iOS 设备
附上地址 https://github.com/SnapKit/Masonry

singleView

    UIView *view = [[UIView alloc]init];
    view.backgroundColor = [UIColor redColor];
    [self.view addSubview:view];
    //先加到 view 上,在用 masonry 写约束
    //添加约束
   [view mas_makeConstraints:^(MASConstraintMaker *make) {
        // 方法一
        //        make.left.equalTo(@20);
        //        make.top.equalTo(@50);
        //        make.right.equalTo(@-100);
        //        make.bottom.equalTo(@-200);
        //  -100,-200 相对数学中的 xy 坐标系来想就想的明白了
        // 方法二
        make.edges.equalTo(self.view).insets(UIEdgeInsetsMake(50, 20, 200, 100));
       // UIEdgeInsets insets = {top, left, bottom, right};
    }];

TwoViews

-(void)twoViews
{
    UIView *view1 = [[UIView alloc]init];
    view1.backgroundColor = [UIColor redColor];
    
    UIView *view2 = [[UIView alloc]init];
    view2.backgroundColor = [UIColor yellowColor];
    
    //在做约束之前,需要先把view添加到父视图上面
    [self.view addSubview:view1];
    [self.view addSubview:view2];
    
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(@10);
        make.top.equalTo(@100);
        make.height.equalTo(@150);
    }];
     //view1的 width 是根据 view2来定的,所以不能写死
    [view2 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(view1.mas_right).offset(10);
    //offset view2相对于 view1的偏移量
        make.right.equalTo(@-10);
        make.top.equalTo(view1.mas_top);
        make.height.equalTo(view1);
        make.width.equalTo(view1);
        //宽度和高度是size
//        make.size.equalTo(view1);
    }];

ScrollView

-(void)scrollView
{
    UIView *backView = [[UIView alloc]init];
    backView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:backView];
    
    [backView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view).insets(UIEdgeInsetsMake(50, 10, 100, 100));
    }];

    UIScrollView *scroll = [[UIScrollView alloc]init];
    [backView addSubview:scroll];
    scroll.backgroundColor = [UIColor orangeColor];
    
    [scroll mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(backView);
    }];
    
    scroll.contentSize = CGSizeMake(0, 1000);
    
    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    view.backgroundColor = [UIColor blueColor];
    [scroll addSubview:view];
    
    [view mas_makeConstraints:^(MASConstraintMaker *make) {
//        make.left.equalTo(@10);
//        make.right.equalTo(@-10);
//        make.top.equalTo(@100);
//        make.bottom.equalTo(@-50);
        make.edges.equalTo(scroll);
//        make.size.equalTo(backView);
        make.width.equalTo(scroll);
//        make.height.equalTo(scroll);
    }];

    UIView *lastView;
    for (int i = 0; i<5; i++) {
        UIView *subview = [[UIView alloc]init];
        subview.backgroundColor = [UIColor colorWithRed:(arc4random()%7)*0.1   green:(arc4random()%7)*0.1 blue:(arc4random()%7)*0.1 alpha:1.0];
        [view addSubview:subview];
        
        if (i == 0) {
            [subview mas_makeConstraints:^(MASConstraintMaker *make) {
                make.left.equalTo(@20);
                make.top.equalTo(@20);
                make.right.equalTo(@-20);
                make.height.equalTo(@(i * 100 + 100));
            }];
        }
        else
        {
            [subview mas_makeConstraints:^(MASConstraintMaker *make) {
                make.left.equalTo(lastView);
                make.width.equalTo(lastView);
                make.height.equalTo(@(i * 100 + 100));
                make.top.equalTo(lastView.mas_bottom).offset(10);
            }];
        }
        
        lastView = subview;
    }
    [view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(lastView.mas_bottom).offset(20);;
    }];
}

6出来了以后 AutoLayout 也是一种不错的解决方案,masonry 的源码还是值得一看的,有助于提升编程思想,推荐。

相关文章

  • iOS框架·Masonry源码深度解析及学习启示:设计模式与链式

    传送门:链式编程小Demo 这篇文章是 Masonry 框架源码的解析和笔记。学习Masonry之前,先了解这个框...

  • Masonry学习笔记

    Masonry Masonry是一个轻量级的布局框架,采用链式语法封装自动布局,简明,高可读。 通常leading...

  • Masonry 学习笔记

    Masonry 用链式语句封装自动化布局,让布局的语句可以更简洁明了,可读性更高。首先将布局语句封装在 block...

  • masonry学习笔记

    一、封装结构 MASConstraint 约束MASCompositeConstraint 一组约束//MASVi...

  • Masonry 学习笔记

    一个轻量级的布局框架, 同时支持 iOS 和 Mac OS X, 采用更优雅的链式语法封装自动布局,语法优雅, 帮...

  • Masonry学习笔记

    Masonry是一个轻量级的布局框架, 对AutoLayout 进行了封装,它拥有自己的描述语法(采用更优雅的链式...

  • Masonry学习笔记

    Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读...

  • masonry

    为什么要做这个笔记 masonry [https://github.com/SnapKit/Masonry]可以说...

  • Masonry笔记

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMa...

  • Masonry 笔记

    最近每周末都会看叶孤城的直播,对于我们iOS开发者来说,确实是一个福利,很感谢他们的分享精神,收获到的一些东西特此...

网友评论

    本文标题:Masonry 学习笔记

    本文链接:https://www.haomeiwen.com/subject/sdijhttx.html