NSLayoutManager с NSTextContainer на абзац

Как создать NSLayoutManager, который назначает каждый абзац в своем тексте другому NSTextContainer?

Это похоже на использование нескольких страниц/столбцов, распространенное в TextKit, но каждая страница соответствует отдельному абзацу переменной длины.


person Richard Venable    schedule 25.11.2013    source источник


Ответы (2)


Я думаю, что самый простой способ сделать это - создать подкласс NSTextContainer и переопределить

- (CGRect)lineFragmentRectForProposedRect:(CGRect)proposedRect atIndex:(NSUInteger)characterIndex writingDirection:(NSWritingDirection)baseWritingDirection remainingRect:(CGRect *)remainingRect

В своем пользовательском методе вы должны проверить атрибуты в characterIndex и посмотреть, соответствуют ли они абзацу, которому назначен текстовый контейнер. Если это так, просто верните super реализацию метода, в противном случае верните CGRectZero, чтобы показать, что предложенный прямоугольник недействителен для этого текстового контейнера. Это означает, что вам придется отслеживать атрибуты абзаца и текстовые контейнеры, которым они соответствуют (и наоборот).

person Ben Lachman    schedule 11.12.2013
comment
Спасибо за идею! Я собираюсь попробовать это, когда у меня будет шанс, и вернусь к вам. - person Richard Venable; 11.12.2013
comment
ссылка разработчика мертва - person Suragch; 08.06.2015
comment
Я думаю, это ссылка, о которой вы говорили developer.apple.com/library/ios/documentation/StringsTextFonts/ (внизу) - person Sam Soffes; 17.11.2015

Другой способ — вставка управляющего символа разрыва страницы (код ASCII: 12) в конце каждого абзаца.

person elprup    schedule 05.12.2015