masonry 布局的那些骚操作

常用的用法就不再多说

1
2
3
4
5
6
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(@100);
make.left.equalTo(@50);
make.right.equalTo(@(-50));
make.height.mas_equalTo(50);
}];

##Masonry的c骚操作

Masonry的库里有一个NSArray的Category,用法有点骚;当有多个view的时候,你可以将多个view放在Array中,用Array去约束,当然这种相当于批量操作。
更骚的是,当一行显示10个等分label的时候,for循环创建布局,然后计算?NO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSMutableArray <UIButton *> *buttons = [NSMutableArray new];
NSArray <NSString *> *titles = @[@"站内信",@"公告",@"消息"];
for (int i = 0; i < titles.count; i ++) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.tag = i+1000;
[buttons addObject:button];
[self addSubview:button];
[[UIButton appearance] setExclusiveTouch:YES];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchDown];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.bottom.equalTo(self);
}];
}
[buttons mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:0 leadSpacing:0 tailSpacing:0];
- (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

这两个方法的不同就在于第二个参数,第一个是“两个控件间隔”第二个是控件的宽或者高。