iOS 7文本套件:何时nslayoutmanager填满了最后一个nstextcontainer



我正在使用与uipageViewController结合使用的文本套件来创建一本书。原始文本存储在文本文件(.html)中,并放置在nstextstorage中。

[nSlayOutManager addTextContainer:(nstextContaner*)txt]方法很棒,但是也无法知道nslayoutmanager何时填充了最后一个nstextContainer-即使显示了所有下一个nStextContainer,也只会继续返回NSTEXTContainer。结果,在完成NSlayoutManager之后,您将获得全银页。

我尝试使用[nslayoutmanagerdelegate didCompleteLayoutfortextContainer:atend:]回调方法,但它无法正常工作。它在填充每个NstextContainer后返回Atend flag =是,不仅是填充最后一个NstextContainer时。我已经设置了uitextview.scrollable = no(在其他地方建议),但这无济于事。

我还尝试通过调用UITEXTVIEW.TEXT来检查文本时,当未显示文本时,但是该方法始终返回在nstextContainer/nslayoutmanager后面放置的整个NstextStorage的内容。

如果我无法分辨何时填充最后一个容器,我不知道何时布置所有页面。是否有一种方法可以测试UITEXTVIEW以查看其空或nscontainer还是Nslayoutmanager,以查看已完成文本?

我永远无法正确调用回电方法 - 我认为这是一个错误 - 但是我找到了一种检查下一个容器是否为空容器的方法。。

    [_layoutManager addTextContainer:textContainer];
    NSRange range = [_layoutManager glyphRangeForTextContainer:textContainer];
    if (range.length == 0) {
        return nil;// top adding container because this last one is empty
    }

通过调用glyphrangefortextcontainer方法检查容器是否是最后一个。如果超过字形数,那是最后一个容器。

layoutManager.addTextContainer(container)
let glyphRange = NSMaxRange((layoutManager.glyphRangeForTextContainer(container)))
if glyphRange >= layoutManager.numberOfGlyphs {
    // last container
}

相关内容