在iOS开发的工程中,我们大部分都使用AutoLayout来实现布局,鉴于系统原生AutoLayout API提供的函数的复杂性和代码量,我们实现一个简单的布局,往往需要大量的代码才能实现。这个时候,基于AutoLayout封装的第三方库Masonry的及时出现,解决了这个问题。只需要很少量的代码,我们即可以实现轻松的实现我们的需求。而类似等间距布局的视图布局,也经常长线在我们的需求中,那么问题来了,如何使用masonry来实现等间距布局呢。其实Masonry提供了两个API来实现这种需求。
1.固定控件间距,自适应宽度(高度)
/// 自适应控件宽度(高度) 我们设置控件的之间的间距,自动计算控件的高度(宽度)
/// @param axisType 控件排列的方向
/// @param fixedSpacing 间距
/// @param leadSpacing 右边视图距离父视图间距
/// @param tailSpacing 右边视图距离父视图间距
- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
例如我们想实现这种等间距布局的视图,几行代码就可以实现。
NSMutableArray * tempArray = [NSMutableArray new];
NSArray * titles = @[@"自适应宽度按钮1",@"自适应宽度按钮2",@"自适应宽度按钮3",@"自适应宽度按钮4"];
for (int i= 0; i<titles.count; i++) {
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:titles[i] forState:UIControlStateNormal];
[button.titleLabel sizeToFit];
button.backgroundColor = [UIColor darkGrayColor];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:10];
button.tag = i;
[self.view addSubview:button];
[tempArray addObject:button];
}
NSArray * buttonArr = [tempArray copy];
NSInteger padding = 10;
[buttonArr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:padding leadSpacing:padding tailSpacing:padding];
[buttonArr mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
make.height.mas_equalTo(40);
}];
2.固定控件宽度(高度),自适应控件间距
/// 固定控件宽度(高度) 我们设置控件的宽度(高度) 自动计算控件之间的间距
/// @param axisType 控件排列的方向
/// @param fixedItemLength 控件的宽度(高度)
/// @param leadSpacing 左边视图距离父视图的间距
/// @param tailSpacing 右边视图距离父视图的间距
- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing;
例如实现下图所示的布局,几行代码即可实现:
NSMutableArray * tempArray = [NSMutableArray new];
NSArray * titles = @[@"自适应宽度按钮1",@"自适应宽度按钮2",@"自适应宽度按钮3",@"自适应宽度按钮4"];
for (int i= 0; i<titles.count; i++) {
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:titles[i] forState:UIControlStateNormal];
[button.titleLabel sizeToFit];
button.backgroundColor = [UIColor darkGrayColor];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:10];
button.tag = i;
[self.view addSubview:button];
[tempArray addObject:button];
}
NSArray * buttonArr = [tempArray copy];
NSInteger padding = 10;
[buttonArr mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedSpacing:padding leadSpacing:padding tailSpacing:padding];
[buttonArr mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self.view);
}];