Я создаю класс, который отображает окно с некоторым текстом, флажок "Не показывать снова" и кнопку. Чтобы быть повторно используемым, класс изменяет размер окна по мере необходимости, чтобы соответствовать тексту.
Однако в вычислениях есть небольшая неточность - если я не добавляю 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) Я полагаю, что, изменив ширину после вычисления, обертка теоретически может измениться и оставить в противном случае последнюю строку неиспользованной, создавая дополнительное пустое пространство под текстом.