美文网首页
2、iOS开发之Masonry布局

2、iOS开发之Masonry布局

作者: jdallen | 来源:发表于2019-04-20 11:23 被阅读0次

    0、简介

    Masonry 就是第三方为我们封装好的一个 AutoLayout 框架。其使用点语法,可以非常便利的添加 AutoLayout约束,且通俗的语法让人非常容易理解。

    1、集成

    从Github(https://github.com/SnapKit/Masonry)下载压缩包,解压,将下图箭头指向的目录文件复制到工程:

    QQ图片20190418101758.png
    复制时在弹出的对话框选择Create groups for any added folders(如果为蓝色(folder)的话,编译时会出现Masonry.h not found的错误)
    12345.png

    注意点:在Xcode中Masonry目录应呈黄色(group),如果为蓝色(folder)的话,编译时会出现Masonry.h not found的错误。
    group 和 folder的区别
    group 一般只在你的工程中是文件夹的形式,但是在本地的目录中还是以散乱的形式放在一起的,除非你是从外部以group的形式引用进来的。
    folder 只能作为资源,整个引用进项目,不能编译代码,也就是说,以folder形式引用进来的文件,不能被放在complie sources列表里面。

    2、使用

    参考:https://www.jianshu.com/p/6ab926c6647d
    Masonry 中多个UILabel 横向约束的展示

    0、删除Masonry目录下的info.plist文件。

    1、在AppDelegate.h文件中:

    @property (strong, nonatomic) ViewController *rootView;
    

    2、在AppDelegate.m文件中:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        self.window =[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen]bounds]];
        self.window.backgroundColor=[UIColor whiteColor];
        self.rootView =[[ViewController alloc] init];
        [self.window setRootViewController:self.rootView];
        [self.window makeKeyAndVisible];
        return YES;
    }
    

    3、在ViewController.m文件中

    #import "ViewController.h"
    #import "Mansonry.h"
    
    // 1、创建一个UIView视图。
    UIView *view = [[UIView alloc] init];
    view.backgroundColor =  [UIColor redColor];
    
    // 2、要在加入视图之后再设置它的约束。
    [self.view addSubview:view];
        
    // 3、设置约束,使用Masonry添加约束。
    [view makeConstraints:^(MASConstraintMaker *make) {  //^(MASConstraintMaker *make)代码块的写法
        make.center.equalTo(self.view);//跟父布局居中
        make.size.mas_equalTo(CGSizeMake(120, 120));//大小120
    }];
    
    
    make.width.and.height.mas_equalTo(120);
    make.width.and.height.equalTo(@120);
    make.size.mas_equalTo(CGSizeMake(120, 120));//大小120
    

    3、补充知识点

    方法中以代码块作为参数,相当于Java的中的接口回调

    typedef  void (^NSTYPE)(MASConstraintMaker *make);
    
    //声明
    -(void)makeConstraints:(NSTYPE) a;
    
    //实现
    -(void)makeConstraints:(NSTYPE) a{
    a("jdallen");
    }
    //调用
    [view makeConstraints:^(Nstring * name){
    NSLog(name);//打印出来的是"jadllen"
    }];
    
    
    代码块的生命(相当于接口回调)
    -(返回类型)方法名:((代码块的返回类型)(^代码块类型随机取跟变量名一样)(MASConstraintMaker *make,MASConstraintMaker *make)) a blockB:((代码块的返回类型)(^代码块名随机取跟变量名一样)(MASConstraintMaker *make,MASConstraintMaker *make)) b;
    

    详情见:https://www.jianshu.com/p/0e1a986424ff(Block的定义和使用)

    Masonry 中多个UILabel 横向约束的展示
    https://www.jianshu.com/p/7798585755cc

    相关文章

      网友评论

          本文标题:2、iOS开发之Masonry布局

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