iOS计算文本内容显示行数

工作终于到了一个这样的场景,判断文本是否超过10行,如果超过的话,则添加更多按钮。

让文本不超过10行,我们可以直接通过设置Label的numberOfLines为10实现,但是更多按钮的显示,则需要判断文本高度是否超过10行。

一般方法为通过boundingRectWithSize方法获得文本高度 单行文本高度 =行数,然后再进行判断。

但是如果文本分段,存在段间距及行间距的情况下,行数的计算就显得尤为不准确。所以,我采用了以下这种方式。

//获取文本行数
- (int)getNumberOfLinesWithText:(NSMutableAttributedString *)text andLabelWidth:(CGFloat)width {
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)text);
    CGMutablePathRef Path = CGPathCreateMutable();
    CGPathAddRect(Path, NULL ,CGRectMake(0 , 0 , width, INT_MAX));
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), Path, NULL);
    // 得到字串在frame中被自动分成了多少个行。
    CFArrayRef rows = CTFrameGetLines(frame);
    // 实际行数
    int numberOfLines = CFArrayGetCount(rows);
    CFRelease(frame);
    CGPathRelease(Path);
    CFRelease(framesetter);
    return numberOfLines;
}

你可能感兴趣的:(iOS计算文本内容显示行数)