iOS Masonry 等间隔或等宽高排列多个控件

masonry 目前提供了相应的接口,直接使用即可.

一、先解释相关API

/**
 *  distribute with fixed spacing
 *
 *  @param axisType     横排还是竖排
 *  @param fixedSpacing 两个控件间隔
 *  @param leadSpacing  第一个控件与边缘的间隔
 *  @param tailSpacing  最后一个控件与边缘的间隔
 */
- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;

/**
 *  distribute with fixed item size
 *
 *  @param axisType        横排还是竖排
 *  @param fixedItemLength 控件的宽或高
 *  @param leadSpacing     第一个控件与边缘的间隔
 *  @param tailSpacing     最后一个控件与边缘的间隔
 */
- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;

两个API,分为固定间隔不固定宽高,固定宽高不固定间隔,根据具体需求使用相应的即可。
需要注意的是: 横排的时候要相应设置控件数组的垂直约束,竖排的时候要相应设置控件数字的水平约束。

二、具体实践测试

首先做准备工作,先生成四个View(需要被排列的),代码如下:

- (NSMutableArray *)masonryViewArray {

    if (!_masonryViewArray) {

        _masonryViewArray = [NSMutableArray array];
        for (int i = 0; i < 4; i ++) {

            UIView *view = [[UIView alloc] init];
            view.backgroundColor = [UIColor redColor];
            [self.view addSubview:view];
            [_masonryViewArray addObject:view];
        }
    }

    return _masonryViewArray;
}
1、水平方向排列、固定控件间隔、控件长度不定

测试代码如下

- (void)test_masonry_horizontal_fixSpace {

    // 实现masonry水平固定间隔方法
    [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:30 leadSpacing:10 tailSpacing:10];

    // 设置array的垂直方向的约束
    [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {

        make.top.equalTo(150);
        make.height.equalTo(80);
    }];
}
2、水平方向排列、固定控件长度、控件间隔不定

代码如下:

- (void)test_masonry_horizontal_fixItemWidth {

    // 实现masonry水平固定控件宽度方法
    [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:80 leadSpacing:10 tailSpacing:10];

    // 设置array的垂直方向的约束
    [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {

        make.top.equalTo(150);
        make.height.equalTo(80);
    }];
}
3、垂直方向排列、固定控件间隔、控件高度不定

代码如下:

- (void)test_masonry_vertical_fixSpace {

    // 实现masonry垂直固定控件高度方法
    [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedSpacing:30 leadSpacing:10 tailSpacing:10];

    // 设置array的水平方向的约束
    [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.equalTo(150);
        make.width.equalTo(80);
    }];
}
4、垂直方向排列、固定控件高度、控件间隔不定
- (void)test_masonry_vertical_fixItemWidth {

    // 实现masonry垂直方向固定控件高度方法
    [self.masonryViewArray mas_distributeViewsAlongAxis:MASAxisTypeVertical withFixedItemLength:80 leadSpacing:10 tailSpacing:10];

    // 设置array的水平方向的约束
    [self.masonryViewArray mas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.equalTo(150);
        make.width.equalTo(80);
    }];
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • masonry 目前提供了相应的接口,直接使用即可,这里记录或许可以提醒某些不知道的人罢了! 一、先解释相关API...
    王隆帅阅读 21,385评论 15 103
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,950评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,705评论 0 17
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 10,020评论 0 11
  • 文/云吞悠扬 曾经有人问我,这是一个什么样的世界,我的回答是,这是一个随时都会崩塌的世界。 意外、疾病、财产损失、...
    云吞悠扬阅读 3,848评论 3 2