Как получить высоту для NSAttributedString в фиксированной ширине

Я хочу сделать некоторый рисунок NSAttributedStrings в полях фиксированной ширины, но испытываю затруднения при вычислении правильной высоты, которую они поднимут при привлечении. До сих пор я попробовал:

  1. Вызов - (NSSize) size, но результаты бесполезны (с этой целью), поскольку они дадут любой ширине строковые требования.

  2. Вызов - (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options с реагированием, имеющим форму к ширине, я хочу и NSStringDrawingUsesLineFragmentOrigin в опциях, точно поскольку я использую в своем рисунке. Результаты... трудно понять; конечно, не, что я ищу. (Как указан во многих местах, включая этот поток Какао-Dev).

  3. Создание временного NSTextView и выполнения:
    [[tmpView textStorage] setAttributedString:aString];
    [tmpView setHorizontallyResizable:NO];
    [tmpView sizeToFit];

    Когда я запрашиваю кадр tmpView, ширина все еще так желаема, и высота часто корректна..., пока я не добираюсь до более длинных строк, когда это часто - половина размера, это требуется. (Кажется, нет макс. поражаемого размера: один кадр будет 273,0 высокими (приблизительно 300 слишком короткие), другой будет 478.0 (только с 60 выходами слишком короткий)).

Я ценил бы любые указатели, если кто-либо еще управлял этим.

48
задан bonaldi 17 February 2010 в 16:53
поделиться

3 ответа

Ответ : использовать
- (void) drawWithRect: (NSRect) rect options: (NSStringDrawingOptions) options
но rect , которое вы передаете, должно иметь 0,0 в измерении, которое вы хотите сделать безграничным (что, э-э, имеет смысл). Пример здесь .

15
ответ дан 26 November 2019 в 18:59
поделиться

Возможно, вас заинтересует отличная (только для OS X) категория NS (с атрибутами) String + Geometrics Джерри Кринока, которая предназначена для выполнения всевозможных измерений строк, включая то, что вы ищете.

6
ответ дан 26 November 2019 в 18:59
поделиться
-[NSAttributedString boundingRectWithSize:options:]

Вы можете указать NSStringDrawingUsesDeviceMetrics , чтобы получить объединение всех границы глифов .

В отличие от - [NSAttributedString size] , возвращенный NSRect представляет размеры области, которая изменится при рисовании строки.

Как комментирует @Bryan, boundingRectWithSize: options: устарел (не рекомендуется) в OS X 10.11 и новее. Это связано с тем, что стили строк теперь динамические в зависимости от контекста.

Для OS X 10.11 и более поздних версий см. Документацию разработчика Apple Расчет высоты текста .

31
ответ дан 26 November 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: