来自CoreText的attributionString的LineCount是错误的

时间:2017-06-21 18:00:45

标签: ios objective-c core-text

来自CoreText基础的属性字符串的行数似乎是错误的。我使用以下代码来提取应该存在于属性字符串中的行数。

 - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:@"\nMe and Me\n" attributes:nil];
    CGPathRef path = CGPathCreateWithRect(CGRectMake(0, 0, 335, 1000000), nil);
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString);
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0,0), path, NULL);
    NSLog(@"%ld", numberOfLines(frame));


}

static CFIndex numberOfLines(CTFrameRef frame) {
    CGRect bounds = CGRectNull;
    CFArrayRef lines = CTFrameGetLines(frame);
    CFIndex numLines = CFArrayGetCount(lines);
    CGPoint *lineOrigins = malloc((numLines + 1) * sizeof(CGPoint));
    CTFrameGetLineOrigins(frame, CFRangeMake(0, 0), lineOrigins);
    return numLines;
}

我预计返回的行数等于3。一个用于第一个换行符,一个用于文本" Me和Me",一个用于最后一个换行符。任何想法为什么它会返回2?

1 个答案:

答案 0 :(得分:1)

它只是使用通用定义,换行符为0或更多字符终止

您可以将行为与wc中运行的标准Terminal(字数统计)命令进行比较。在您的示例文本上,它报告2行,3个单词和11个字符。在最终换行符和文件结尾之间添加字符会增加单词&字符计数,但行数保持为2。

HTH