NSString boundingRectWithSize слегка занижает правильную ширину - почему?

Я ' m создание класса, который отображает окно с некоторым текстом, флажком «Больше не показывать» и кнопкой. Чтобы его можно было использовать повторно, класс изменяет размер окна по мере необходимости, чтобы соответствовать тексту.

Однако есть небольшая неточность в расчетах - если я не добавляю 5 пикселей к ширине, некоторые строки обрезаются. (Последнее слово просто удаляется.)

Вот что у меня есть:

// NSTextField *textLabel;
// NSString *text;
NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject: [textLabel font] forKey: NSFontAttributeName];
NSRect textFrame = [text boundingRectWithSize:NSMakeSize(textLabel.frame.size.width, (unsigned int)-1)
                                      options:(NSStringDrawingDisableScreenFontSubstitution | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                   attributes:stringAttributes];
textFrame.size.width += 5;

Я временно установил желтый цвет фона метки, чтобы упростить отладку, и он явно расширяется до почти соответствует последнему слово. Для этой тестовой строки достаточно 4 пикселей.
есть небольшая неточность в расчетах - если я не добавляю 5 пикселей к ширине, некоторые строки обрезаются. (Последнее слово просто удаляется.)

Вот что у меня есть:

// NSTextField *textLabel;
// NSString *text;
NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject: [textLabel font] forKey: NSFontAttributeName];
NSRect textFrame = [text boundingRectWithSize:NSMakeSize(textLabel.frame.size.width, (unsigned int)-1)
                                      options:(NSStringDrawingDisableScreenFontSubstitution | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                   attributes:stringAttributes];
textFrame.size.width += 5;

Я временно установил желтый цвет фона метки, чтобы упростить отладку, и он явно расширяется до почти соответствует последнему слово. Для этой тестовой строки достаточно 4 пикселей.
есть небольшая неточность в расчетах - если я не добавляю 5 пикселей к ширине, некоторые строки обрезаются. (Последнее слово просто удаляется.)

Вот что у меня есть:

// NSTextField *textLabel;
// NSString *text;
NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject: [textLabel font] forKey: NSFontAttributeName];
NSRect textFrame = [text boundingRectWithSize:NSMakeSize(textLabel.frame.size.width, (unsigned int)-1)
                                      options:(NSStringDrawingDisableScreenFontSubstitution | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                   attributes:stringAttributes];
textFrame.size.width += 5;

Я временно установил желтый цвет фона метки, чтобы упростить отладку, и он явно расширяется до почти соответствует последнему слово. Для этой тестовой строки достаточно 4 пикселей.
Обратите внимание, что не все строки выходят из строя без этих добавленных пикселей.

Меня волнуют две причины:
1) Я хочу узнать, почему это немного не так, и что более важно
2) Я полагаю, что при изменении ширины после расчета обертка теоретически может измениться и оставить последнюю строку неиспользованной, создавая дополнительное пустое пространство под текстом.

8
задан exscape 1 April 2011 в 10:46
поделиться