МИНИМАЛЬНАЯ ширина ограничивающего прямоугольника для NSAttributedString
У меня есть NSAttributedString, которую я рисую в прямоугольнике (здесь нет текстовых представлений). Я разрешаю пользователю resize
этот прямоугольник, заставляя текст переноситься на несколько строк. Все хорошо, и я использую NSTextContainer и т. Д., Чтобы определить высоту ограничения текста для данной ширины.
Задача, с которой я столкнулся, заключается в том, чтобы знать, какой может быть минимальная ширина, чтобы я не позволил пользователю изменить размер прямоугольника, чтобы он был уже самого широкого character/glyph
в строке.
У меня есть рабочее решение, которое включает в себя получение ограничивающего rect
за каждый глиф (boundingRectForGlyphRange
) и отслеживание самых больших - но это реальный убийца производительности на больших строках.
Кто-нибудь знает лучший способ?
Спасибо
1 ответ
Когда вы выбираете свой шрифт и язык отображения, вы можете скомпилировать поиск всех возможных значений ширины глифа. Закажите сначала убывание с самыми большими глифами, затем используйте rangeOfString: != NSNotFound
; разрыв после того, как вы найдете один (это ваша максимальная ширина глифа).
Трудно сказать, на что похожа разница в производительности, но она, вероятно, быстрее, чем выборка ширины всех ваших глифов каждый раз, так как это просто сравнение строк вместо измерения шрифта.