UITextView vs UILabel + ScrollView

时间:2015-06-04 18:52:36

标签: objective-c uilabel uitextview core-text

我正在开发一个需要视图控制器的应用程序,以显示其中的大量希伯来语(非英语)文本。

该文本是富文本文件中的AttributedString

我需要做4件事。

  1. 平滑滚动

  2. 获取单词的范围,以便我可以自动滚动到它(如scrollRangeToVisible

  3. 顺利更改字体(我想使用UISlider更改字体)

  4. 快速加载

  5. 从某种意义上说,我正在寻找电子阅读器的功能,我只需要一列,我希望它不滚动页面。

    我尝试过的事情,有利有弊

    常规UITextView& Scrollview被收录为UITextView

    PROS:

    • 轻松搜索和自动滚动
    • 快速加载
    • 平滑字体更改

    CON:

    • 非常不稳定的滚动

    ScrollView中的UILabel

    PROS:

    • 搜索和自动滚动不容易但易于管理
    • 非常流畅的滚动

    CON:

    • 非常不稳定的字体切换
    • 缓慢加载

    我唯一没试过的(我能想到的)是 CoreText

    coreText是否可行?我宁愿使用UITextView,如果有办法让它更好地渲染大量的希伯来语(非英语)文本。

    注意:我已经尝试在UITextView和Selectable上禁用编辑。

    编辑1

    -(double)Height{
        [layoutManager glyphRangeForTextContainer:textContainer];
        NSLog(@"HEIGHT = %f",[layoutManager
                              usedRectForTextContainer:textContainer].size.height);
        return [layoutManager
                usedRectForTextContainer:textContainer].size.height;
    }
    

1 个答案:

答案 0 :(得分:1)

我愿意

  • 使用希伯来文本创建NSTextStorage(NSAttributedString)对象。
  • 创建NSLayoutManager对象,NSTextContainer。把它们连起来。
  • Render将它们放到自定义UIView上,其大小可以从NSLayoutManager查询,如this

    实现scrollRangeToVisible本身就是一项很好的任务。我会使用these方法之一。

    如果您只有字符范围且需要计算字形范围,these方法之一可能有所帮助。

    这不是一件容易的事,但是一个非常好的项目:)