При использовании [NSString boundingRectWithSize:options:attributes]
размер прямоугольника, который возвращается, выше, чем я ожидал бы для определенных строк. Возвращаемая высота представляет собой максимально возможную высоту строки с указанными атрибутами, а не высоту самой строки.NSString boundingRectWithSize, возвращающий излишне высокую высоту
Предполагая одинаковые атрибуты и параметры, высота, возвращаемая для строки «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}}
Пожалуйста, проверьте ответ на подобный вопрос здесь- [http://stackoverflow.com/a/27289303/591811][1] [1]: http://stackoverflow.com/a/27289303/591811 – shoan