2、iOS开发之Masonry布局
2019-04-20 本文已影响0人
jdallen
0、简介
Masonry 就是第三方为我们封装好的一个 AutoLayout 框架。其使用点语法,可以非常便利的添加 AutoLayout约束,且通俗的语法让人非常容易理解。
1、集成
从Github(https://github.com/SnapKit/Masonry)下载压缩包,解压,将下图箭头指向的目录文件复制到工程:
复制时在弹出的对话框选择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