Как получить количество оберток CATextLayer для расчета высоты - PullRequest
1 голос
/ 29 марта 2012

Я добавляю текст постепенно к упаковке CATextLayer в UIScrollView. Каждый раз, когда я добавляю текст, мне нужно добавить высоту к текстовому слою и к contentSize scrollView и настроить contentOffset.

scrollView.

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

UIKit sizeWithFont: будет обрабатывать всю строку так, как если бы она находилась в одной строке, поэтому для вычисления высоты мне нужно умножить размер size.height, возвращаемый на количество строк, полученное в результате переноса textLayer.

Проблема в том, что если я получу доступ к строке через textLayer, она не будет содержать никаких дополнительных символов "\ n" или "\ r" для учета переноса.

Конечно, есть какой-то способ получить информацию об упаковке? Может быть, как-то из суперкласса CALayer? В противном случае я застреваю в расчете собственных разрывов строк.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2012

Я предполагаю, что CATextLayer внутренне использует Core Text для разметки, поэтому вы можете сделать то же самое и использовать CTFramesetterSuggestFrameSizeWithConstraints для вычисления подходящей высоты для приписанной строки с заданной шириной.

0 голосов
/ 05 апреля 2012

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

Но я не понимаю, почему CATextLayer не разрешает доступ к тому, что делают его функции обертывания - либо добавление разрывов строк к самому свойству строки, к которому мы могли бы затем получить доступ, либо просто предоставление чтения "lineCount" -только аксессуар.

...