美文网首页
UILabel的高度跟随文本内容的增/减而变化

UILabel的高度跟随文本内容的增/减而变化

作者: js_huh | 来源:发表于2019-11-27 18:38 被阅读0次

分析:

  1. 允许label多行显示.
    @property (nonatomic ,weak)UILabel *text_Label; //label控件属性
    textLabelTemp.numberOfLines = 0; //允许多行显示

  2. 获取文本的真实的CGSize
    NSString 的方法boundingRectWithSize: options: attributes: context:
    NSStringDrawingOptions讲解

    - (CGRect)boundingRectWithSize:(CGSize)size 
                       options:(NSStringDrawingOptions)options 
                    attributes:(NSDictionary<NSAttributedStringKey, id> *)attributes 
                       context:(NSStringDrawingContext *)context;
    
    当前上下文 (哪个字符串调用,'当前上下文'就指哪个)
    在指定的矩形内 (size)  (CGSizeMake(MAXFLOAT, MAXFLOAT) - 无穷宽, 无穷高的矩形)
    根据, 给定选项 (options) (如: 以每行组成矩形的方式来计算整个文本 'NSStringDrawingUsesLineFragmentOrigin')
    和显示特性 (attributes) (如: 字体大小)
    和绘制'上下文' (context) (可为: nil 如: 绘制过程中最小字体的比例 'minimumScaleFactor')
    计算并返回'当前上下文'实际的"边界矩形(X,Y,W,H)"
    

    示例:

    CGSize textSize = CGSizeMake(300, MAXFLOAT); //固定宽度,无穷高
    NSDictionary *textAttr = @{NSFontAttributeName:[UIFont systemFontOfSize:14]}; // 字体为14
    /*
      当前上下文(self.text), 在指定的矩形(textSize - 宽为300, 高为无穷高)内,
      根据
        1. 每行组成一个矩形
        2. 字体为14.
      的方式计算并返回,当前上下文的实际边界.
    */ 
    CGRect textRect = [self.text boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttr context:nil];   
    
  3. 将值赋给UILabel

    //根据实际的边界,获取真实的高度 
    CGFloat textH = textRect.size.height;
    self.text_Label.frame = CGRectMake(X, Y, W, textH);
    

相关文章

网友评论

      本文标题:UILabel的高度跟随文本内容的增/减而变化

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