При использовании [NSString boundingRectWithSize:options:attributes]
размер возвращаемого прямоугольника выше, чем я ожидал бы для определенных строк. Возвращаемая высота представляет собой максимально возможную высоту строки с указанными атрибутами, а не высоту самой строки.
Предполагая те же атрибуты и параметры, высота, возвращаемая для строки "cars
", равна той же высоте, что и для строки "ÉTAS-UNIS
" (обратите внимание на акцент на E).
Я бы ожидал, что boundingRectWithSize
рассмотрит только символы в данной строке, которые, на мой взгляд, вернут более короткую высоту для строки "cars
".
В прикрепленных скриншотах я заполнил прямоугольник, возвращенный из boundingRectWithSize
, и обозначил красным то, что я предположил бы, что ограничивающий прямоугольник должен был быть. Ширина прямоугольника в значительной степени, как я ожидал бы, но высота значительно выше, чем я ожидал. Почему это?
Пример кода:
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));
Выход:
Lowercase rect: {{0, -6}, {43.1953125, 33}}
Uppercase rect: {{0, -6}, {128.44921875, 33}}
Capitalized rect: {{0, -6}, {64.5, 33}}