美文网首页
用masonry自适应label高度和宽度

用masonry自适应label高度和宽度

作者: HelloWong | 来源:发表于2021-04-15 10:56 被阅读0次

    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高度和宽度

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