Я хочу сделать некоторый рисунок NSAttributedStrings в полях фиксированной ширины, но испытываю затруднения при вычислении правильной высоты, которую они поднимут при привлечении. До сих пор я попробовал:
Вызов - (NSSize) size
, но результаты бесполезны (с этой целью), поскольку они дадут любой ширине строковые требования.
Вызов - (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options
с реагированием, имеющим форму к ширине, я хочу и NSStringDrawingUsesLineFragmentOrigin
в опциях, точно поскольку я использую в своем рисунке. Результаты... трудно понять; конечно, не, что я ищу. (Как указан во многих местах, включая этот поток Какао-Dev).
Создание временного NSTextView и выполнения:[[tmpView textStorage] setAttributedString:aString];
[tmpView setHorizontallyResizable:NO];
[tmpView sizeToFit];
Когда я запрашиваю кадр tmpView, ширина все еще так желаема, и высота часто корректна..., пока я не добираюсь до более длинных строк, когда это часто - половина размера, это требуется. (Кажется, нет макс. поражаемого размера: один кадр будет 273,0 высокими (приблизительно 300 слишком короткие), другой будет 478.0 (только с 60 выходами слишком короткий)).
Я ценил бы любые указатели, если кто-либо еще управлял этим.
Ответ : использовать
- (void) drawWithRect: (NSRect) rect options: (NSStringDrawingOptions) options
но rect
, которое вы передаете, должно иметь 0,0 в измерении, которое вы хотите сделать безграничным (что, э-э, имеет смысл). Пример здесь .
Возможно, вас заинтересует отличная (только для OS X) категория NS (с атрибутами) String + Geometrics
Джерри Кринока, которая предназначена для выполнения всевозможных измерений строк, включая то, что вы ищете.
-[NSAttributedString boundingRectWithSize:options:]
Вы можете указать NSStringDrawingUsesDeviceMetrics
, чтобы получить объединение всех границы глифов .
В отличие от - [NSAttributedString size]
, возвращенный NSRect
представляет размеры области, которая изменится при рисовании строки.
Как комментирует @Bryan, boundingRectWithSize: options:
устарел (не рекомендуется) в OS X 10.11 и новее. Это связано с тем, что стили строк теперь динамические в зависимости от контекста.
Для OS X 10.11 и более поздних версий см. Документацию разработчика Apple Расчет высоты текста .