2、iOS开发之Masonry布局

2019-04-20  本文已影响0人  jdallen

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

上一篇下一篇

猜你喜欢

热点阅读