用masonry自适应label高度和宽度

CompressionResistance 和 PriorityHuggingPrioritycontent

  • hugging 这个约束条件,会尽可能压缩视图,使其紧贴内容;
  • compression resistance 这个约束条件,会尽可能向外扩大视图,是内容尽可能不会被裁剪。
  • Content Compression Resistance = 不许挤我!

这个属性的优先级(Priority)越高,越不“容易”被压缩。也就是说,当整体的空间装不下所有的View的时候,Content Compression Resistance优先级越高的,显示的内容越完整。

  • Content Hugging = 抱紧!

这个属性的优先级越高,整个View就要越“抱紧”View里面的内容。也就是View的大小不会随着父级View的扩大而扩大。一般用于 UILabel 之类的控件。

比如现在有一个 label 和一个 view,两者水平相邻,我们想要让 label 尺寸根据内容变化,左边跟容器保持固定间距,右侧跟 view 保持固定间距,view 的右侧跟容器的右侧保持固定间距。就像下面这样:

┏━━━━━━━━━━━━━━━━━━━━━━┓
┃ ┏━━━━━━━┓  ┏━━━━━━━┓ ┃
┃ ┃ label ┃  ┃  view ┃ ┃
┃ ┗━━━━━━━┛  ┗━━━━━━━┛ ┃
┗━━━━━━━━━━━━━━━━━━━━━━┛

实现代码如下:

    // 1. 给 label 添加约束
    // ...
    
    // 2. 设置 label 的 Hugging Priority,使其宽度跟文字内容一样宽
    [label setContentHuggingPriority:UILayoutPriorityRequired
                                forAxis:UILayoutConstraintAxisHorizontal];
                                
    // 3. 给 view 添加约束
    // ...

1.自适应宽度,则不设置label的宽度

2.进行label的多行显示设置时,主要是如下三个方面的设置

1、@property(nonatomic)CGFloat preferredMaxLayoutWidth;

2、- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis;

3、@property(nonatomic) NSInteger numberOfLines;
label.preferredMaxLayoutWidth = width;

//设置huggingPriority
[label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

//设置换行
label.numberOfLines = 0;

你可能感兴趣的:(用masonry自适应label高度和宽度)