NSLayoutManager的行为?

时间:2016-01-05 18:39:31

标签: nsstring nslayoutmanager

我有一个NSLayoutManager,两个NSTextContainers和一个NSTextStorage对象。

我将字符串逐个添加到textStorage对象,直到第一个textContainer已满,然后我使用添加到该textContainer的文本量在我的图书应用中绘制一个页面。

99%的时间didCompleteLayoutForTextContainer中的isAtEnd标志会告诉我第一个文本容器何时满了。

但是,在极少数情况下,如果我在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将从第一个textContainer移动单词“Greece”并将其移动到第二个textContainer。

我宁愿让layoutManager告诉我第一个textContainer已经填满,然后我尝试添加一个新字符串并让它执行此意外行为。

谁能告诉我为什么会这样?或告诉我如何再次发生这样的事情,以便我能弄明白第一个textContainer何时真的满了?

谢谢!

1 个答案:

答案 0 :(得分:0)

可以创建NSTypesetter的子类并覆盖方法layoutParagraphAtPoint()。此方法返回将在nexy段开头的下一个字符,或者可能在textContainer的结尾处 - 我不确定。