自己总结的一些关于Masonry适配姿势

作者: 小二同學 | 来源:发表于2016-12-14 15:59 被阅读762次

之前做Masonry适配,适配精确度不高,而且代码可读性比较差,一堆固定的数字,看起来非常扎眼,我觉得适配应该尽可能少出现数字,特别是比较大的间距,要尽量做到自适应。自己这几天翻看了Masonry源码,总结了一些,自己之前很少用到的姿势,来分享一下。

如果各个控件里面的间距都一样的话,可以定义一个padding,这样在Masonry适配的时候就直接拿这个padding去标记间距,要做到复用。
int padding = 10;

然后,Masonry里面这样用

make.left.greaterThanOrEqualTo(@(padding));
make.bottom.equalTo(blueView.top).offset(-padding);
三个控件等宽
make.height.equalTo(@[greenView.mas_height, redView.mas_height]);
整体居中
make.center.equalTo(self);
如果有动画效果,可以拉伸的话,用这个。不会超出父视图范围。
make.width.lessThanOrEqualTo(self);
make.height.lessThanOrEqualTo(self);
设置中心点坐标和大小
make.center.equalTo(CGPointMake(0, 50));
make.size.equalTo(CGSizeMake(200, 100));
For循环里面使用Masonry
for (int i = 0; i < 10; i++) {
        UIView *view = UIView.new;
        view.backgroundColor = [self randomColor];
        view.layer.borderColor = UIColor.blackColor.CGColor;
        view.layer.borderWidth = 2;
        [self addSubview:view];
        
        [view mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(lastView).insets(UIEdgeInsetsMake(5, 10, 15, 20));
        }];
        
        lastView = view;
    }
上下左右都和某一控件比的话,还可以这样写
make.left.right.and.top.equalTo(self);
宽是高的三倍
make.width.equalTo(self.topInnerView.mas_height).multipliedBy(3);
适配出现问题
Masonry Log.png

控制台会打印这些东西,仔细检查你的约束。

Label文字自适应高度
UILabel *lab1 = [[UILabel alloc]initWithFrame:CGRectZero];
    lab1.text = @"zfkjfjfj爱很简单发生标点符号必定会被对方不开始覅还会发黑丝回复isif";
    lab1.textColor = [UIColor greenColor];
    lab1.backgroundColor = [UIColor blackColor];
    lab1.preferredMaxLayoutWidth = (self.view.frame.size.width-2*padding);
    [lab1 setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    lab1.numberOfLines = 0;
    [self.view addSubview:lab1];
    
    UILabel *lab2 = [[UILabel alloc]initWithFrame:CGRectZero];
    lab2.text = @"zfkjfjfj爱很简单发生标点符号必定会被对方不开始覅还会发黑打火机是发生的粉红色的符合规划是高科技和丝回复isif";
    lab2.textColor = [UIColor blueColor];
    lab2.preferredMaxLayoutWidth = (self.view.frame.size.width-2*padding);
    [lab2 setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    lab2.numberOfLines = 0;
    [self.view addSubview:lab2];
    
    [lab1 mas_makeConstraints:^(MASConstraintMaker *make) {
       
        make.left.greaterThanOrEqualTo(@(padding));
        make.right.equalTo(self.view.mas_right).offset(-padding);
        make.top.equalTo(self.view.mas_top).offset(100);
    }];
    
    [lab2 mas_makeConstraints:^(MASConstraintMaker *make) {
        
        make.left.equalTo(self.view.mas_left).offset(padding);
        make.right.equalTo(self.view.mas_right).offset(-padding);
        make.top.equalTo(lab1.mas_bottom).offset(20);
    }];
x轴居中
make.centerX.equalTo(self);

就这么多吧,慢慢学习封装和复用的思想,增强代码可读性。

相关文章

  • 自己总结的一些关于Masonry适配姿势

    之前做Masonry适配,适配精确度不高,而且代码可读性比较差,一堆固定的数字,看起来非常扎眼,我觉得适配应该尽可...

  • Autolayout、VFL、Masonry

    适配 VFL语言 Masonry 代码实现Autolayout VFL代码 Masonry使用 总结 使用代码实现...

  • iOS开发文档

    1.**关于适配** 1.代码适配:引用第三方库“SDAutoLayout”以及“Masonry”进行代码适配. ...

  • 版本适配

    屏幕适配 代码适配 Masonry UIView+AutoLayout 可视化适配 autoLayout 系统适配...

  • Masonry

    Masonry适配 常用属性含义(View+MASShorthandAdditions.h) Masonry NS...

  • 二.字符串添加*****----请求的数据有----

    (1)号码 添加****** (2)数据中存在 (3)适配SDlayout (4)适配Masonry ...

  • iOS Masonry常用方法

    Masonry就是为屏幕适配而生的三方框架. Masonry基础API 更新约束和布局 Masonry示例代码 常...

  • SDAutoLayout 适配

    以前工程里使用的都Masonry 适配的, 在工程中使用Layout比较少, 网上也很多关于SDAutoLayou...

  • 学习masonry适配

    masonry适配 示例: UILabel *lable=[[UILabel alloc]init]; l...

  • Masonry(Autolayout框架)的实践小结

    在看MJ关于QQ空间横竖屏适配了解到Masonry这个Autolayout框架,顿时惊为天人,比官方那个用法好用太...

网友评论

    本文标题:自己总结的一些关于Masonry适配姿势

    本文链接:https://www.haomeiwen.com/subject/kdpimttx.html