2017-06-21 2 views
0

Le nombre de lignes attribuées à partir de la fondation CoreText semble incorrect. J'ai utilisé le code suivant pour extraire le nombre de lignes qui devraient être présentes dans une chaîne attribuée.La valeur de LineCount pour attributeString de CoreText est incorrecte.

- (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; 
} 

Je m'attendais à ce que le nombre de lignes à retourner soit égal à trois. Un pour la première nouvelle ligne, un pour le texte "Me and Me", et un pour le dernier newline. Des idées pourquoi il est plutôt de retour 2?

Répondre

1

Il est simplement en utilisant la définition commune qu'une ligne est zéro ou plusieurs caractères terminée par un saut de ligne.

Vous pouvez comparer le comportement à la commande standard wc (nombre de mots) exécutée dans Terminal. Sur votre texte d'exemple, il signale 2 lignes, 3 mots et 11 caractères. Ajout de caractères entre la nouvelle ligne finale et la fin du fichier augmente le mot & nombre de caractères, mais le nombre de lignes reste à 2.

HTH

+0

Il n'y a aucun moyen de préciser que ses trois lignes puis au lieu de 2 avec le retour à la ligne ? – MichaelGofron

+0

Utilisez juste trois newlines: '@" \ nMe et moi \ n \ n "' – CRD