МИНИМАЛЬНАЯ ширина ограничивающего прямоугольника для NSAttributedString

У меня есть NSAttributedString, которую я рисую в прямоугольнике (здесь нет текстовых представлений). Я разрешаю пользователю resize этот прямоугольник, заставляя текст переноситься на несколько строк. Все хорошо, и я использую NSTextContainer и т. Д., Чтобы определить высоту ограничения текста для данной ширины.

Задача, с которой я столкнулся, заключается в том, чтобы знать, какой может быть минимальная ширина, чтобы я не позволил пользователю изменить размер прямоугольника, чтобы он был уже самого широкого character/glyph в строке.

У меня есть рабочее решение, которое включает в себя получение ограничивающего rect за каждый глиф (boundingRectForGlyphRange) и отслеживание самых больших - но это реальный убийца производительности на больших строках.

Кто-нибудь знает лучший способ?

Спасибо

1 ответ

Когда вы выбираете свой шрифт и язык отображения, вы можете скомпилировать поиск всех возможных значений ширины глифа. Закажите сначала убывание с самыми большими глифами, затем используйте rangeOfString: != NSNotFound; разрыв после того, как вы найдете один (это ваша максимальная ширина глифа).

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

Другие вопросы по тегам