动态调整UILabel高度

需求点:


有时我们需要根据UILabel内部的字体格式(包括字体大小,行间距)来动态调整UILabel的高度。
笔者在这里提供了两个方法,可以根据UILabel内部特定的字体,行间距,UILabel宽度来获得UILabel内部的真是高度。

动态调整Label的高度一共分为三个步骤

  1. 获得具有特定格式的AttributedString。
  2. 根据AttributedString来获得新高度。
  3. 重新设置Label的高度。

示例Demo


笔者通过同时显示具有相同内容的Label来对比一下有无动态调整高度的情况。

实现步骤:

1. 获得具有特定格式的AttributedString

/**

 *  获取特定格式的属性字符串

 *

 *  @param string  原字符串

 *  @param font    字体

 *  @param spacing 行间距

 *

 *  @return 特定格式的属性字符串

 */
- (NSAttributedString *)attributedStringWithString: (NSString *)string andFont: (UIFont *)font andLineSpacing:(CGFloat)spacing

{

    NSMutableAttributedString *contentString = [[NSMutableAttributedString alloc]  initWithString:string];

    [contentString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, contentString.length)];

  

    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];

    [paragraphStyle setAlignment:NSTextAlignmentLeft];

    [paragraphStyle setLineSpacing:spacing];

    [contentString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [contentString length])];

    

    return [contentString copy];

}

2. 根据AttributedString来获得高度

/**

 *  获取根据特定格式的属性字符串计算的新高度

 *

 *  @param string   特定格式的属性字符串

 *  @param maxWidth UILable的最宽宽度(换行点)

 *

 *  @return 根据特定格式的属性字符串计算的新高度

 */
- (CGSize)sizeOfAttributedString: (NSAttributedString *)string withMaxWidth: (CGFloat)maxWidth
{
    CGRect rect = [string boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
    return rect.size;

}

3. 重新设置Label的高度

NSAttributedString *string = [self attributedStringWithString:self.contentString andFont:[UIFont systemFontOfSize:15.0] andLineSpacing:2.0];

CGSize size = [self sizeOfAttributedString:string withMaxWidth:maxWidth];

self.resizeLabel.frame =  CGRectMake((self.view.bounds.size.width - maxWidth)/2, 400, maxWidth, size.height);
self.resizeLabel.attributedText = string;

作为对比,显示具有相同格式内容的UILabel

self.orignalLabel.attributedText = [self attributedStringWithString:self.contentString andFont:[UIFont systemFontOfSize:15.0] andLineSpacing:2.0 ];

效果图:


动态调整UILabel高度_第1张图片
动态调整Label高度

-------------------------------- 2018年7月16日更新 --------------------------------

注意注意!!!

笔者在近期开通了个人公众号,主要分享编程,读书笔记,思考类的文章。

  • 编程类文章:包括笔者以前发布的精选技术文章,以及后续发布的技术文章(以原创为主),并且逐渐脱离 iOS 的内容,将侧重点会转移到提高编程能力的方向上。
  • 读书笔记类文章:分享编程类思考类心理类职场类书籍的读书笔记。
  • 思考类文章:分享笔者平时在技术上生活上的思考。

因为公众号每天发布的消息数有限制,所以到目前为止还没有将所有过去的精选文章都发布在公众号上,后续会逐步发布的。

而且因为各大博客平台的各种限制,后面还会在公众号上发布一些短小精干,以小见大的干货文章哦~

扫下方的公众号二维码并点击关注,期待与您的共同成长~

公众号:程序员维他命

你可能感兴趣的:(动态调整UILabel高度)