2016-01-05 2 views
0

У меня есть NSLayoutManager, два NSTextContainers и объект NSTextStorage.Поведение NSLayoutManager?

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

99% времени, когда флаг isAtEnd в didCompleteLayoutForTextContainer скажет мне, когда первый текстовый контейнер заполнился.

Однако, в редком случае, если я добавлю строку в textStorage, она фактически удалит текст из первого текстового контейнера!

Например, когда первый текстовый контейнер имеет эту строку в нем (и почти полное):

\n\n\n\n\n\nMexico \n\nBook Covers from Germany \n\n \n\n \n\n Book Covers from Germany Special Edition \n\nBook Covers from Denmark Sweden \n\nBook Covers from Japan \n\nBook Covers From Finland \n\nBook Covers From Greece 

если добавить эту строку в textStorage:

Spain \n\nBook Covers From Iceland \n\nBook Covers From Netherlands \n\nBook Covers from Norway 

в LayoutManager будет переместите слово «Греция» из первого текстового контейнера и переместите его во второй текстовыйконтейнер.

Я бы предпочел, чтобы layoutManager сказал мне, что первый textContainer был заполнен, прежде чем я попытался добавить новую строку и сделать это неожиданным образом.

Может ли кто-нибудь сказать мне, почему это происходит? или скажите мне, как я могу сказать, когда это произойдет снова, чтобы я мог понять, когда первый текстовый контейнер действительно заполнен?

Спасибо!

ответ

0

Может быть создан подкласс для NSTypesetter и переопределить метод layoutParagraphAtPoint(). Этот метод возвращает следующий символ, который будет в начале абзаца nexy или может быть в конце textContainer - я не уверен.

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