神刀安全网

iOS上富文本的解决方案

简述

富文本无非要实现两类效果:

  • 图片和文字的混排
  • 文字样式的随意修改

实现方式

  • 通过CoreText/TextKit来原生实现
  • 通过webView来间接实现

具体实现

一图胜千言:

iOS上富文本的解决方案

通过CoreText/TextKit来原生实现

iOS 6之前:CoreText,纯C语言,极其蛋疼

iOS 6开始:NSAttributedString,简单易用

iOS 7开始:TextKit,功能强大,简单易用

对于NSAttributedString(iOS6开始):

  • 可以给指定范围(range)内的string添加属性(见UIKit中的 NSAttributedString.h 中的属性列表);
  • 可以使用它的类方法 attributedStringWithAttachment: ,将图片以附件( NSTextAttachment )的形式附加在已有NSAttributedString的后面。

对于TextKit(iOS7开始):

  • 可以通过继承 NSTextStorageNSLayoutManager 来对不同的样式(如指定文字的高亮、背景颜色、下划线等)进行自定义处理;
  • 可以设置 NSTextContainerexclusionPaths 属性来设置镂空区域。

对于DTCoreText:

  • 对CoreText进行了封装;
  • 可以将html转换成 NSAttributedString ,而依然以 html的样式 展示出来;
  • 支持CSS样式的展示;
  • 支持内嵌html5视频及播放;
  • 支持对多种附件(图片、视频等)的自定义处理;
  • 支持远程图片等懒加载。

Ref:

通过webView来间接实现

原理是类似symfony中的twig模板,将设计好的模板存在项目中(.mustache和.html),字体保存为.ttf,然后每次请求数据时,将服务器返回的html用这个模板进行渲染,再用嵌入的webview加载,从而得到整体风格一致的页面。

具体实现可以参考开源中国iOS版本的源码。

Ref:

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » iOS上富文本的解决方案

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址