【iOS开发】Mansory自动布局(autolayout)使用教程

来源:互联网 发布:微派网络 融资 编辑:程序博客网 时间:2024/06/05 18:22

一、简介

Mansory

Mansory是一个轻量级的自动布局库,采用独特的链式语法进行代码封装,具有高可用性和阅读性等特点,支持iOS和Mac OS X。

先上点官方的代码,当当开胃菜。

Heres the same constraints created using MASConstraintMaker。

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);[view1 mas_makeConstraints:^(MASConstraintMaker *make) {    make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler    make.left.equalTo(superview.mas_left).with.offset(padding.left);    make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);    make.right.equalTo(superview.mas_right).with.offset(-padding.right);}];

Or even shorter

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {    make.edges.equalTo(superview).with.insets(padding);}];

上面两段代码是等价的,让一个view的各个边缘距离父视图分别为10的间距。实际效果是一样的,只是方法上面有优略而已。

二、实践

看mansory里面的view支持哪些属性

MASViewAttribute NSLayoutAttribute 描述 view.as_left NSLayoutAttributeLeft 左边 view.mas_right NSLayoutAttributeRight 右边 view.mas_top NSLayoutAttributeTop 上边 view.mas_bottom NSLayoutAttributeBottom 下边 view.mas_leading NSLayoutAttributeLeading 头部 view.mas_trailing NSLayoutAttributeTrailing 尾部 view.mas_width NSLayoutAttributeWidth 宽 view.mas_height NSLayoutAttributeHeight 高 view.mas_centerX NSLayoutAttributeCenterX 横向中点 view.mas_centerY NSLayoutAttributeCenterY 纵向中点 view.mas_baseline NSLayoutAttributeBaseline 文本基线

下面通过一些Demo来进一步介绍如何使用mansory。

1.【初阶】居中显示一个UIView

- (void)viewDidLoad{    [super viewDidLoad];    UIView *t_view = [UIView new];    t_view.backgroundColor = [UIColor redColor];    // 记得在添加约束之前,一定要先view添加到superView上面,否则会出现崩溃    [self.view addSubview:t_view];    [t_view mas_makeConstraints:^(MASConstraintMaker *make) {        // t_view居中        make.center.equalTo(self.view);        // t_view的size        make.size.mas_equalTo(CGSizeMake(300, 300));    }];}

这里写图片描述

2.【初阶】让一个view略小于其superView(边距为20)

- (void)viewDidLoad{    [super viewDidLoad];    UIView *t_view2 = [UIView new];    t_view2.backgroundColor = [UIColor greenColor];    [self.view addSubview:t_view2];    [t_view2 mas_makeConstraints:^(MASConstraintMaker *make) {//  等价于      //make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(20, 20, 20, 20));//   等价于     //make.top.bottom.left.and.right.equalTo(self.view).with.insets(UIEdgeInsetsMake(20, 20, 20, 20));        make.top.equalTo(self.view).with.offset(20);        make.bottom.equalTo(self.view).with.offset(-20);        make.left.equalTo(self.view).with.offset(20);        make.right.equalTo(self.view).with.offset(-20);    }];}

这里写图片描述

3.【初阶】让两个宽度为200的view 垂直居中且等宽等间距的排列 (自动计算高度)

- (void)viewDidLoad{    [super viewDidLoad];    int padding = 30;    UIView *t_view3 = [UIView new];    t_view3.backgroundColor = [UIColor blueColor];    [self.view addSubview:t_view3];    UIView *t_view4 = [UIView new];    t_view4.backgroundColor = [UIColor orangeColor];    [self.view addSubview:t_view4];    [t_view3 mas_makeConstraints:^(MASConstraintMaker *make) {        make.centerX.mas_equalTo(self.view.mas_centerX);        make.top.equalTo(self.view.mas_top).with.offset(padding);        make.bottom.equalTo(t_view4.mas_top).with.offset(-padding);        make.height.equalTo(t_view4);        make.width.mas_equalTo(@200);    }];    [t_view4 mas_makeConstraints:^(MASConstraintMaker *make) {        make.centerX.mas_equalTo(self.view.mas_centerX);        make.top.equalTo(t_view3.mas_bottom).with.offset(padding);        make.bottom.equalTo(self.view.mas_bottom).with.offset(-padding);        make.height.equalTo(t_view3);        make.width.mas_equalTo(@200);    }];}

这里写图片描述

4.【中阶】在UIScrollView中顺序排列一些view并自动计算contentSize
注意:scrollView计算contentSize的时候,要先用一个containView填满整个scrollView,这样约束才能够准确计算。

- (void)viewDidLoad{    [super viewDidLoad];    UIScrollView *scrollView = [UIScrollView new];    scrollView.backgroundColor = [UIColor grayColor];    [self.view addSubview:scrollView];    [scrollView mas_makeConstraints:^(MASConstraintMaker *make) {        make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(20, 20, 20, 20));    }];    // 这个containView是用来先填充整个scrollView的,到时候这个containView的size就是scrollView的contentSize    UIView *containView = [UIView new];    containView.backgroundColor = [UIColor blackColor];    [scrollView addSubview:containView];    [containView mas_makeConstraints:^(MASConstraintMaker *make) {        make.edges.equalTo(scrollView);        make.width.equalTo(scrollView);    }];    UIView *lastView = nil;    for (int i = 0; i < 6; i++) {        UIView *sub_view = [UIView new];        sub_view.backgroundColor = [UIColor colorWithHue:( arc4random() % 256 / 256.0 )                                              saturation:( arc4random() % 128 / 256.0 ) + 0.5                                              brightness:( arc4random() % 128 / 256.0 ) + 0.5                                                   alpha:1];        [containView addSubview:sub_view];        [sub_view mas_makeConstraints:^(MASConstraintMaker *make) {            make.left.and.right.equalTo(containView);            make.height.mas_equalTo(@(30*i));            if (lastView)            {                make.top.mas_equalTo(lastView.mas_bottom);            }else            {                make.top.mas_equalTo(containView.mas_top);            }        }];        lastView = sub_view;    }    // 最后更新containView    [containView mas_makeConstraints:^(MASConstraintMaker *make) {        make.bottom.equalTo(lastView.mas_bottom);    }];}

这里写图片描述

5.【高阶】

。。。。。。。。

Demo github地址:Demo_Mansory

5 0
原创粉丝点击