Masonry使用技巧
2018-03-15 本文已影响3人
coderhlt
一、相同View水平、竖直方向上排布
//- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
//- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
使用例子:
for (int i=0; i<10; i++) {
UIView *view=[[UIView alloc]init];
[self.view addSubview:view];
view.backgroundColor=[UIColor redColor];
[array addObject:view];
}
//等固定大小垂直方向上排布
[array mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedItemLength:30 leadSpacing:10 tailSpacing:10];
[array mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(20);
make.width.equalTo(@40);
}];
//等固定大小水平方向上排布
[array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:30 leadSpacing:10 tailSpacing:10];
[array mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.height.equalTo(@40);
}];
//等间距水平方向上排布
[array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:10 leadSpacing:10 tailSpacing:10];
[array mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(20);
make.height.equalTo(@40);
}];
//等间距垂直方向上排布
[array mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedSpacing:10 leadSpacing:10 tailSpacing:10];
[array mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.view).offset(20);
make.width.equalTo(@40);
}];
二、lable显示多行需要得到高度
UILabel *lable=[[UILabel alloc]init];
[self.view addSubview:lable];
lable.text=@"1234567890123456789qqqqddd问问呜呜呜fffffffffggggggrrr0";
lable.numberOfLines=0;
[lable mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.equalTo(self.view).offset(100);
make.width.equalTo(@100);
}];
lable.preferredMaxLayoutWidth=100;//如果你不需要拿到系统计算的高度值,你就没必要设置;如果你希望拿到这个值,建议你最好设置(因为在开发中发现,如果不设置的话拿到的值就不准确)
//强制更新一下,如果不更新约束并不会马上转成frame,打印的值为0
[lable layoutIfNeeded];
//得到期望值
NSLog(@"%f",lable.frame.size.height);
三、UIScrollview遇到Masonry。
UIScrollView是个非常特殊的view UIScrollView与其subview之间相对位置的约束 并不会直接用于frame的计算 而是会转化为对ContentSize的计算
UIScrollView *scrollview=[[UIScrollView alloc]init];
[self.view addSubview:scrollview];
[scrollview mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
//1.初始化一个view容器
UIView *contentview=[[UIView alloc]init];
[scrollview addSubview:contentview];
//2、这里的约束并不会转化成frame,而是决定了contantsize
[contentview mas_makeConstraints:^(MASConstraintMaker *make) {
//告诉scrollview的滚动内容是以contentview的边界为界限的
make.edges.equalTo(scrollview);
//内容的宽度是375,决定了水平方向可滚动的大小是375。
make.width.equalTo(@375);
}];
UIView *redview=[[UIView alloc]init];
redview.backgroundColor=[UIColor redColor];
[contentview addSubview:redview];
[array addObject:redview];
[redview mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.equalTo(contentview);
make.height.equalTo(@1000);
}];
//3、垂直方向可滚动的范围是直到redview的底部
[contentview mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(redview);
}];
}