首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 7文本套件: NSLayoutManager什么时候填满了它的最后一个NSTextContainer?

iOS 7文本套件: NSLayoutManager什么时候填满了它的最后一个NSTextContainer?
EN

Stack Overflow用户
提问于 2014-01-30 04:00:35
回答 2查看 820关注 0票数 1

我正在结合使用Text Kit和UIPageViewController来创建一本书。原始文本存储在文本文件(.html)中,并放入NSTextStorage中。

NSLayoutManager addTextContainer:(NSTextContaner*)txt方法工作得很好,但是没有办法知道NSLayoutManager何时填满了最后一个NSTextContainer -即使在显示完所有下一个之后,它也会一直返回NSTextContainer。因此,在NSLayoutManager完成后,您将获得一个所有存储体页面。

我尝试过使用回调didCompleteLayoutForTextContainer: atEnd: NSLayoutManagerDelegate方法,但它不能正常工作。它在填充每个NSTextContainer之后返回atEnd标志= YES,而不仅仅是在填充最后一个NSTextContainer时返回。我已经设置了UITextView.scrollable = NO (建议在其他地方),但这没有帮助。

当没有文本显示时,我还试图通过调用UITextView.text来检查文本,但该方法总是返回位于NSTextContainer/NSLayoutManager后面的整个NSTextStorage的内容。

如果我不知道最后一个容器什么时候被填满,我就不知道什么时候所有的页面都被布置好了。有没有一种方法可以测试UITextView,看看它是空的还是NSContainer的,或者测试NSLayoutManager,看看文本布局完成了吗?

EN

回答 2

Stack Overflow用户

发布于 2014-02-05 11:03:54

我永远不能让回调方法被正确调用--我认为这是个bug --但我找到了一种方法来检查下一个容器是否会是空的。

代码语言:javascript
复制
    [_layoutManager addTextContainer:textContainer];
    NSRange range = [_layoutManager glyphRangeForTextContainer:textContainer];
    if (range.length == 0) {
        return nil;// top adding container because this last one is empty
    }
票数 1
EN

Stack Overflow用户

发布于 2015-12-06 00:23:40

通过调用glyphRangeForTextContainer方法检查容器是否为最后一个容器。如果它超过了字形的数量,那就是最后一个容器。

代码语言:javascript
复制
layoutManager.addTextContainer(container)

let glyphRange = NSMaxRange((layoutManager.glyphRangeForTextContainer(container)))
if glyphRange >= layoutManager.numberOfGlyphs {
    // last container
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21441369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档