NSString boundingRectWithSize zwraca niepotrzebnie wysoką wysokość

Podczas używania[NSString boundingRectWithSize:options:attributes] rozmiar zwracanego rect jest wyższy niż oczekiwałbym dla niektórych ciągów. Zwrócona wysokość wydaje się reprezentować maksymalną możliwą wysokość łańcucha o danych atrybutach, a nie wysokość samego ciągu.

Zakładając te same atrybuty i opcje, wysokość zwracana dla ciągu ”cars„jest taka sama wysokość zwrócona dla ciągu”ÉTAS-UNIS„(zwróć uwagę na akcent na E).

Spodziewałbym sięboundingRectWithSize brać pod uwagę tylko znaki w danym ciągu, które moim zdaniem spowodowałyby, że zwrócą krótszą wysokość dla ciągu ”cars

W załączonych zrzutach ekranu wypełniłem zwrócone rectboundingRectWithSize i zaznaczony na czerwono, co powinienem założyć, że ograniczenie rect powinno być. Szerokość recta jest prawie taka, jakiej oczekiwałbym, ale wysokość jest znacznie wyższa niż się spodziewałem. Dlaczego?

Przykładowy kod:

NSRect boundingRect = NSZeroRect;
NSSize constraintSize = NSMakeSize(CGFLOAT_MAX, 0);

NSString *lowercaseString = @"cars";
NSString *uppercaseString = @"ÉTAS-UNIS";
NSString *capitalizedString = @"Japan";

NSFont *drawingFont = [NSFont fontWithName:@"Georgia" size:24.0];
NSDictionary *attributes = @{NSFontAttributeName : drawingFont, NSForegroundColorAttributeName : [NSColor blackColor]};

boundingRect = [lowercaseString boundingRectWithSize:constraintSize options:0 attributes:attributes];
NSLog(@"Lowercase rect: %@", NSStringFromRect(boundingRect));

boundingRect = [uppercaseString boundingRectWithSize:constraintSize options:0 attributes:attributes];
NSLog(@"Uppercase rect: %@", NSStringFromRect(boundingRect));

boundingRect = [capitalizedString boundingRectWithSize:constraintSize options:0 attributes:attributes];
NSLog(@"Capitalized rect: %@", NSStringFromRect(boundingRect));

Wydajność:

Lowercase rect: {{0, -6}, {43.1953125, 33}}
Uppercase rect: {{0, -6}, {128.44921875, 33}}
Capitalized rect: {{0, -6}, {64.5, 33}}

questionAnswers(3)

yourAnswerToTheQuestion