ios - UIPageViewController/TextKit 计数页面数

标签 ios swift uipageviewcontroller textkit

如果我有一个很长的 NSTextStorage 并且我知道 NSTextContainer 的 CGSize,我如何计算文本的页数? 这个东西有没有标准的程序或某种动态计算的方法? 我找不到好的教程来使用自定义字体从原始文本制作类似 iBooks 的书(我需要绘制 20-50 页的文本)。

最佳答案

我找到了一种使用 TextKit 的 NSLayoutManager 计算页面数量的好方法。在我创建 NSTextContainers 时只计算页数

    var range = NSMakeRange(0, 0)
    var containerIndex : UInt = 0
    var pageIndex : UInt = 1
    while(NSMaxRange(range) < layoutManager.numberOfGlyphs) {
        let textViewRect = self.frameForViewAtIndex(containerIndex)
        let containerSize = CGSizeMake(textViewRect.size.width, textViewRect.size.height - 16)
        let textContainer = NSTextContainer(size: containerSize)
        layoutManager.addTextContainer(textContainer)

        let textView = UITextView(frame: textViewRect, textContainer: textContainer)
        self.addSubview(textView)
        range = (layoutManager.glyphRangeForTextContainer(textContainer))

        containerIndex++;
        if containerIndex%columnCount == 0 { pageIndex++ }
    }

columnCount 是列数,如果您将使用多列布局

frameForViewAtIndex 返回 scrollView 中当前 textView 的 CGRect

关于ios - UIPageViewController/TextKit 计数页面数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35687802/

相关文章:

ios - NSBundle preferredLocalizations 不返回可用的最具体的本地化

javascript - 在 iOS 上使用 Cordova 持久化数据

ios - UIFeedback 触觉引擎被调用的次数比被激活的次数多

ios - 如何在 iOS 中使用 RTMP 为 Facebook、Youtube 等多个社交媒体创建直播

ios - UIPageViewController 可以返回错误的索引

ios - 在 API 请求后更新 UIPageViewController 的正确方法

ios - 具有多个 View 和弹跳的 UIPageViewController

ios - 启用内容插入的 UIScrollView 分页工作异常

ios - 试图在 UITableView 内向 UILabel 添加点击手势 - 未调用点击手势

ios - "Could not load NIB"子类化 FUIAuthPickerViewController 时