2012-03-29 1 views
1

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

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

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

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

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

ответ

2

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

0

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

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

+1

Я бы предположил, что для атрибутивных строк 'CATextLayer' использует Core Text для макета, поэтому вы можете использовать' CTFramesetterSuggestFrameSizeWithConstraints' для определения высоты слоя. – omz

+0

* Это * ответ. Благодарю. Если вы опубликуете его как таковой, я отмечу его как принятый ответ. Я думаю, что в какой-то момент я кое-что увидел в приложении frameetter, но не нажал. Итак, теперь он вернулся к чертежной доске ... – Wienke

+0

Теперь я отправил свой комментарий в качестве ответа. – omz

 Смежные вопросы

  • Нет связанных вопросов^_^