iOS

OC 自适应文本高度

2017-06-30  本文已影响16人  kaden_dong

前言:这两天写项目,发现计算文本高度的地方有点问题,总是会多出一点来,作为有一点小洁癖的我来说,实在是有点蛋疼,所以就重新写了一个方法(废话有点多了),进入正题

先贴上GItHub下载地址:https://github.com/puwd/AdaptTextHeight

楼主自己封装了一个方法

- (CGFloat)calculateLabelHeightWithText:(NSString *)string width:(CGFloat)width fontSize:(int)fontSize
使用这个方法把需要计算的文本内容放进去,传一个宽度,在传一个字体大小就可以了

    UILabel *label = [[UILabel alloc]init];
    label.numberOfLines = 0;
    label.font = [UIFont systemFontOfSize:fontSize];
    label.lineBreakMode = NSLineBreakByWordWrapping;
    label.text = string;
    CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];
    NSLog(@"size.height is %f",size.height);
    return size.height;

使用labelsizeThatFits属性来计算文本的高
MAXFLOAT是用来计算文本高度的,表示label的高度是随label的内容而变化的,不会因为label的内容过长而现实不全(如果说高度指定,也可以用来计算宽度)

再来看看label.lineBreakMode的各种样式
    NSLineBreakByCharWrapping;     以字符为显示单位显示,后面部分省略不显示。
    NSLineBreakByClipping;         剪切与文本宽度相同的内容长度,后半部分被删除。
    NSLineBreakByTruncatingHead;   前面部分文字以……方式省略,显示尾部文字内容。
    NSLineBreakByTruncatingMiddle; 中间的内容以……方式省略,显示头尾的文字内容。
    NSLineBreakByTruncatingTail;   结尾部分的内容以……方式省略,显示头的文字内容。
    NSLineBreakByWordWrapping;     以单词为显示单位显示,后面部分省略不显示。

贴上效果图

屏幕快照 2017-06-30 下午9.15.34.png
上面的文本使用UILabel展示的
下面用的是UITextVIew展示

请注意

1.在使用该方法时,一定要让展示控件的宽度和字体大小与传过来的宽度和字体大小一致,否则内容也是显示不完整的
2.如果你是使用的UITextView展示,请在计算出来的高度上 +8;(因为UITextView默认是距离顶部8个像素点开始加载的(我是这样理解的),如果不加8的话,会出现底部的文字只能看到一半的效果)
3.如果你选择用UILabel展示请设置label.numberOfLines = 0;

最后:欢迎指出错误,共同学习

上一篇 下一篇

猜你喜欢

热点阅读