我正在使用Text Kit和UIPageViewController来创建一本书。原始文本存储在文本文件(.html)中,并放入NSTextStorage。
[NSLayoutManager addTextContainer:(NSTextContaner *)txt]方法效果很好,但是无法知道NSLayoutManager何时填充了最后一个NSTextContainer - 它只是在显示所有下一个NSTextContainer后继续返回。因此,在NSLayoutManager完成后,您将获得所有银行页面。
我尝试使用[NSLayoutManagerDelegate didCompleteLayoutForTextContainer:atEnd:]回调方法,但它无法正常工作。填充每个NSTextContainer后,它返回atEnd flag = YES,而不仅仅是填充最后一个NSTextContainer时。我设置了UITextView.scrollable = NO(在其他地方建议),但这没有帮助。
我还尝试在没有显示文本的情况下通过调用UITextView.text来检查文本,但该方法总是返回放置在NSTextContainer / NSLayoutManager后面的整个NSTextStorage的内容。
如果我无法判断最后一个容器何时被填满,我不知道所有页面的布局何时。有没有办法测试UITextView以查看它是空的还是NSContainer,或NSLayoutManager看看是否完成了文本的布局?
答案 0 :(得分:1)
我从来没有能够正确调用回调方法 - 我认为这是一个错误 - 但我找到了一种检查下一个容器是否为空的方法..
[_layoutManager addTextContainer:textContainer];
NSRange range = [_layoutManager glyphRangeForTextContainer:textContainer];
if (range.length == 0) {
return nil;// top adding container because this last one is empty
}
答案 1 :(得分:0)
通过调用glyphRangeForTextContainer方法检查容器是否为最后一个。如果它超过了字形数,那就是最后一个容器。
layoutManager.addTextContainer(container)
let glyphRange = NSMaxRange((layoutManager.glyphRangeForTextContainer(container)))
if glyphRange >= layoutManager.numberOfGlyphs {
// last container
}