UILabel设置行间距同时要计算得到行高的最简单的方法

来源:互联网 发布:域名服务器机型 编辑:程序博客网 时间:2024/06/07 23:39
UILabel计算行高有两个方法,一个是

<span style="color:#330033;">sizeWithFont: forWidth: lineBreakMode: </span>

一个是
boundingRectWithSize:  options:  attributes:  context: 
这两个都是NSString的对象方法,根据传入的文字,字体,得到最后的适合的size。


  但是遇到label需要在其中设置行间距的情况下,就需要设置label的attributedText了,但是NSAttributedString是没有上述两个方法的,这个时候应该怎么得到设置了行间距的label的高度呢?

  这个时候就能用到sizeToFit方法了,设置了label对象的attributedText后,再使用sizeToFit就能得到一个适合size的label,这时候直接获取label的宽高,随便~~~

  以下是我写的一个对象方法,当然也可以使用类方法,只是看需要在哪里创建而已,如果随时会改变对象的很多属性的话,推荐使用对象方法,便于控制内存,如果只有那么一次,可以用类方法。

/** *  将一个已经初始化的label设置行间距等属性后,返回一个适合大小的label * *  @param text      label的文字 *  @param x         label的x *  @param y         label的y *  @param maxWidth  label的最大宽度 *  @param fontSize  label的文字大小 *  @param lineSpace label的行间距 */- (void)getLineSpacingLabelWithString:(NSString *)text X:(CGFloat)x Y:(CGFloat)y Width:(CGFloat)maxWidth Font:(CGFloat)fontSize LineSpace:(CGFloat)lineSpace{    // 设置label的属性    self.numberOfLines = 0;    self.lineBreakMode = NSLineBreakByWordWrapping;    // 必须设置字体的    self.font = [UIFont systemFontOfSize:fontSize];        // 下面一句特别注意,我在这里就犯错了,计算出来的高度完全没有问题,新建一个项目,出来的size刚好完美的装着这个label,但是在本项目就是显示不完全,找了好久才找到问题的原因,下面这句话是修改字体的,每个项目都可能修改系统字体为自定义的字体,如果不在sizeToFit之前把字体改回来的话,最后得到的size就是按照系统字体计算出来的size,最后你改了字体,就会导致label的文字显示不完或者有多余的空白。    [Utils setFontFamily:appDelegate.customFontName forView:self andSubViews:YES];            // 根据内容设置label的大小,先设置初始的x,y,width    self.frame = CGRectMake(x, y, maxWidth, 0);    // 设置label的行间距    NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:text];    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];    // 行间距为    [paragraphStyle setLineSpacing:lineSpace];        // 设置文字属性的范围    [attributeString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])];        // 将attributeString赋值给label的attributedText    self.attributedText = attributeString;        // 最关键的一步,之后就获取高度就直接用 label.bounds.size.width    [self sizeToFit];}


1 0
原创粉丝点击