UILabel получает CGRect для подстроки текста - PullRequest
7 голосов
/ 24 июля 2011

Моя цель проста: из UILabel получить прямоугольник подстроки в тексте метки. Из обширного поиска, кажется, ничего не встроено, чтобы справиться с этим. Другие люди задавали подобные вопросы, но ни один из них не получил полного ответа здесь, на Stackoverflow.

// Something like this perhaps (added as a category)
CGRect rect = [myLabel rectForRange:NSMakeRange(3, 5)];

Пример того, для чего он может быть использован (просто чтобы уточнить, что я ищу):

example of rect

Ответы [ 2 ]

7 голосов
/ 11 октября 2011

Это было в основном необходимо для односимвольных ректов, поэтому я сошел с ума и написал код, который мог точно рассчитать прямоугольник для самого простого UILabel. Стандартный UILineBreakMode и выравнивание текста.

Я надеялся, что, если я выпущу его для публики, код внесет в него свой вклад и улучшит его, тем более что я не так много знаю о рендеринге текста!

Код:

https://gist.github.com/1278483

2 голосов
/ 12 августа 2011

Вы правы: это не встроенная часть UILabel.

Если вам это действительно нужно, подкласс UILabel, используйте CoreText для реализации -drawRect:, и вы сможете вычислить прямоугольник для диапазона с помощью CTLineGetOffsetForStringIndex(), CTFrameGetLineOrigins() и CTLineGetTypographicBounds(). Если текст в диапазоне выложен так, чтобы пересекать разрыв строки, это усложняется; вам, вероятно, понадобится несколько ритов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...