一道面试题


一个cell中左边有一个label一个标签(紧挨着label右边),右边有一个图标

label文字不固定

布局的时候要求label宽度随文字变化

但是标签右侧与图标左侧有最小间距

好了我们来捋一捋这个问题

基本的约束就不扯了

主要说一下label宽度怎么约束的问题

先上结论

make.right.lessThanOrEqualTo(图标.mas_left).offset(-最小间距);
make.width.mas_equalTo(计算出来的宽度).priority(999);

这里我设置了label的宽度为文字的宽度

但是优先级低于与图标间距大于12(实际应该由标签宽度与间距确定,这里假定标签内容固定)这一约束

因此在约束不冲突的时候label宽度自适应文字

在文字过长的时候会省略尾部文字以保持间距

在标签内容也不固定的情况下

如果我们优先展示全部的标签内容

标签布局的时候右侧间距需要设置成

make.right.lessThanOrEqualTo(icon.mas_left).offset(-12.0f);

由于label的宽度优先级较低

因此当label文字过长的时候会压缩label的宽度

左侧对齐设置成

make.left.equalTo(label.mas_right).priority(999);