使用Masonry实现等间距布局

在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);
    }];
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫柱子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值