iOS中求出label中文字的行数和每一行的内容

Posted BigBaHuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS中求出label中文字的行数和每一行的内容相关的知识,希望对你有一定的参考价值。

今天遇到一个需求,需要计算label中文字的行数。想了好久也没想到好的解决方法,就在网上找了下。结果发现一篇文章是讲这个的。这部分代码不但能够求出一个label中文字行数,更厉害的是能够求出每一行的内容是什么; 代码如下。

#import <CoreText/CoreText.h>

- (NSArray *)getLinesArrayOfStringInLabel:(UILabel *)label{
    NSString *text = [label text];
    UIFont *font = [label font];
    CGRect rect = [label frame];

    CTFontRef myFont = CTFontCreateWithName(( CFStringRef)([font fontName]), [font pointSize], NULL);
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:text];
    [attStr addAttribute:(NSString *)kCTFontAttributeName value:(__bridge  id)myFont range:NSMakeRange(0, attStr.length)];
    CFRelease(myFont);
    CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString(( CFAttributedStringRef)attStr);
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddRect(path, NULL, CGRectMake(0,0,rect.size.width,100000));
    CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);
    NSArray *lines = ( NSArray *)CTFrameGetLines(frame);
    NSMutableArray *linesArray = [[NSMutableArray alloc]init];
    for (id line in lines) {
        CTLineRef lineRef = (__bridge  CTLineRef )line;
        CFRange lineRange = CTLineGetStringRange(lineRef);
        NSRange range = NSMakeRange(lineRange.location, lineRange.length);
        NSString *lineString = [text substringWithRange:range];
        CFAttributedStringSetAttribute((CFMutableAttributedStringRef)attStr, lineRange, kCTKernAttributeName, (CFTypeRef)([NSNumber numberWithFloat:0.0]));
        CFAttributedStringSetAttribute((CFMutableAttributedStringRef)attStr, lineRange, kCTKernAttributeName, (CFTypeRef)([NSNumber numberWithInt:0.0]));
        //NSLog(@"‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘%@",lineString);
        [linesArray addObject:lineString];
    }

    CGPathRelease(path);
    CFRelease( frame );
    CFRelease(frameSetter);
    return (NSArray *)linesArray;
}

 

文章参照 链接
函数返回的数组的count 即为label中文字行数 ;数组中元素即为某行内容。

转载请注明出处:
原文地址:http://mingxianwei.github.io/2016/05/27/iOS中求出label中文字的行数和每一行的内容
作者:小土豆

 

 




以上是关于iOS中求出label中文字的行数和每一行的内容的主要内容,如果未能解决你的问题,请参考以下文章

转载python计算文件的行数和读取某一行内容的实现方法

VBA中如何获取一个表格的行数和列数

iOS富文本实现(-):私密阅读效果

如何判断Label中文本的行数

获取多个 CSV 文件的行数和列数

使用 jQuery 限制 textarea 中的行数和显示行数