2017-06-21 7 views
0

CoreText基礎からの属性付き文字列の行数が間違っています。私は、次のコードを使用して、属性付き文字列に存在する行数を抽出しました。CoreTextのattributedStringのLineCountが間違っています

- (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になると予想しました。 1つは最初の改行、もう1つは "Me and Me"というテキスト、最後の改行は1つです。代わりに2を返す理由は何ですか?

答えて

1

改行によって、0行以上の文字がで終了するという共通定義を使用しています。

標準のwc(単語カウント)コマンドの動作をTerminalで比較できます。サンプルテキストでは、2行、3語、11文字を報告します。最後の改行の間に文字を追加し、ファイルの最後には、単語&文字の数を増加させるが、行数は2

HTH

+0

にとどまり、それは改行文字と三行、その後の代わりに、2だと指定する方法はありません? – MichaelGofron

+0

3つの改行を使用してください: '@" \ nMeとMe \ n \ n " – CRD

関連する問題