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