美文网首页iOS开发当年奋不顾身跳的那些~坑
iOS开发中使用Masonry设置极限约束以及优先级

iOS开发中使用Masonry设置极限约束以及优先级

作者: 梁森的简书 | 来源:发表于2018-12-17 23:03 被阅读55次

    要求:

    对某个控制器上的view上的label进行布局,要求其右侧至少与view水平方向的中心处对齐,宽度随着文字的增加逐渐变宽,但其右侧距离view右侧至少10pt.

    使用Masonry

    使用Masonry对UILabel进行约束,设置其宽度的最小约束和距离右侧的最大距离
    代码:

      UILabel * orangeLbl = [UILabel new];
    orangeLbl.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:orangeLbl];
    orangeLbl.text = @"设置最小宽度-";
    [orangeLbl mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view.mas_left).offset(10);
        make.top.equalTo(self.view.mas_top).offset(200);
        make.width.mas_greaterThanOrEqualTo(self.view.frame.size.width * 0.5 - 10); // 设置最小宽度
        make.right.mas_lessThanOrEqualTo(self.view.mas_right).offset(-10);  // 设置距离右边最小距离
    }];
    

    使用到了mas_greaterThanOrEqualTo和mas_lessThanOrEqualTo

    要求

    某个控制器上的view上有两个label,左、右两边各一个,两者之间的间距为10pt,左、右两边label的宽度最少为100,但当两个label上的文字都很多的时候首先左侧的label上展示的文字更多。

    使用Masonry

    这是需要使用Masonry设置UILabel抗压缩的优先级
    代码:

       UILabel * leftlbl = [UILabel new];
    [self.view addSubview:leftlbl];
    UILabel * rightLbl = [UILabel new];
    [self.view addSubview:rightLbl];
    
    leftlbl.backgroundColor = [UIColor yellowColor];
    rightLbl.backgroundColor = [UIColor redColor];
    
    [rightLbl mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.view.mas_top).offset(100);
        make.right.equalTo(self.view.mas_right).offset(-10);
        make.width.mas_greaterThanOrEqualTo(100);   // 这是最小宽度
    }];
    [leftlbl mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.view.mas_left).offset(10);
        make.top.equalTo(self.view.mas_top).offset(100);
        make.right.equalTo(rightLbl.mas_left).offset(-10);
        make.width.mas_greaterThanOrEqualTo(100);
    }];
    
    leftlbl.text = @"这是左边的文字-";
    rightLbl.text = @"这是右边的文字-这是右边的文字-这是右边的文字-";
    
    // 设置抗压缩优先级
    [leftlbl setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
    [rightLbl setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
    

    leftlbl的抗压缩优先级更高,所以leftlbl不容易被压缩,能展示更多的文字。

    放个效果图:


    屏幕快照 2018-12-17 下午10.59.39.png

    放个demo
    https://gitee.com/liangsenliangsen/masonry_priority.git

    本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。😊

    相关文章

      网友评论

        本文标题:iOS开发中使用Masonry设置极限约束以及优先级

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