相信大部分的项目中都集成了masonry这个三方库,实际使用中,除了最常用对某一控件的自动布局之外,还有很多隐藏的好方法,比如mas_distributeViewsAlongAxis
只怪自己学艺不精,好多基础的东西现在才开始重视
还是贴代码吧,做个小结
UIView *functionView = [[UIView alloc]init];
functionView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:functionView];
[functionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.bottom. equalTo(self.view);
make.height.mas_equalTo(KTabBarHeight);
}];
这是底层view,在上面创建三个普通按钮
NSArray * titleArr = @[@"编辑小题",@"编辑作业",@"匹配"];
NSMutableArray * buttonArray = [NSMutableArray array];
for (NSInteger i = 0 ; i < titleArr.count; i ++) {
XKCCEditButton * btn = [[XKCCEditButton alloc] init];
[functionView addSubview:btn];
btn.title =titleArr[i];
btn.tag = i + buttonTag;
[btn addTarget:self action:@selector(editButtonClick:) forControlEvents:UIControlEventTouchUpInside];
if (i == titleArr.count - 1) {
btn.backgroundColor = UIColor.redColor;
}
[buttonArray addObject:btn];
}
设置布局
//按钮等间距排列
[buttonArray mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:10 leadSpacing:KMargin tailSpacing:KMargin];
[buttonArray mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(functionView.mas_centerY);
make.height.mas_equalTo(KTITLE_HEIGHT);
}];
四个参数
第一个枚举值,用来确定水平、垂直方向
typedef NS_ENUM(NSUInteger, MASAxisType) {
MASAxisTypeHorizontal,
MASAxisTypeVertical
};
第二个参数,各控件间距
(CGFloat)fixedSpacing
后面两个参数分别是距左/右、上/下,距离
(CGFloat)leadSpacing
(CGFloat)tailSpacing
特别提示:
这个方法的数组元素个数必须大于等于2,否则没有效果,masonry源码部分:
if (self.count < 2) {
NSAssert(self.count>1,@"views to distribute need to bigger than one");
return;
}
··· 其他代码
关于该方法更详细解释,这边集合iOS Masonry 等间隔或等宽高排列多个控件