iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

28 | 怎么应对各种富文本表现需求?

重新定义系统URL加载
NSURLProtocol
使用STMURLCache预下载文章中的图片进行缓存
从数据库中获取未缓存的文章数据
缓存图片的核心技术
预缓存HTML中的图片
STMURLCache
嵌入CALayer
嵌入UIView
嵌入UIImage
缓存图片
拦截HTTP请求
使用NSMutableAttributedString分类
使用NSURLProtocol
考虑和实现
使用UIWebView展示富文本
使用TextKit或YYText
建议使用HTML描述富文本
复杂性
富文本的图文混排
集成
性能和内存占用
缓存图片
加载速度快
加载HTML字符串
面对富文本展示需求
图文混排
设置段落
不同字间距
不同颜色
不同背景
不同字号
不同字体
弱网环境和无网络环境测试
打开速度提升
其他情况
列表展示富文本
YYText
UIWebView
实现思路和方法
项目结合
展示富文本内容
iOS开发中常见需求
属性的字符串
预加载Web页面
富文本展示建议
富文本展示
WebView
富文本展示
富文本
课后作业
总结
富文本展示需求解决方案
富文本表现需求
怎么应对各种富文本表现需求?

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。今天,我要和你分享的主题是,在 iOS 开发中,如何展示富文本的内容。
在 iOS 开发中,富文本的展示是一个非常常见的需求。为了帮助你更好地了解如何展示富文本,我在今天这篇文章中,会结合一个项目来跟你说说面对富文本展示需求时,要怎么考虑和实现。这样,你在自己的项目中,也可以借鉴今天这样的实现思路和方法。
简单来说,富文本就是一段有属性的字符串,可以包含不同字体、不同字号、不同背景、不同颜色、不同字间距的文字,还可以设置段落、图文混排等等属性。
我以前做过一个 RSS 阅读器,阅读器启动后,需要抓取最新的 RSS 内容进行展示。RSS 里面的文章内容属于富文本,是用 HTML 标签来描述的,包含了文字样式、链接和图片。
比如,RSS 阅读器中的某篇文章内容如下:
<item>
<title>涉国资流失嫌疑 东方广益6亿元入股锤子科技被调查</title>
<link>https://www.cnbeta.com/articles/tech/841851.htm</link>
<description>
<![CDATA[
<p><strong>据虎嗅得到的独家消息,成都成华区监察委已立案调查“东方广益6亿元入股锤子科技(北京)股份有限公司”事宜,认为这个项目有国有资产流失嫌疑。</strong>成华区监察委员会成立于2018年2月,按照管理权限对全区行使公权力的公职人员依法实行监察,履行监督、调查和处置职责。</p> <a href="https://www.cnbeta.com/articles/tech/841851.htm" target="_blank"><strong>阅读全文</strong></a>
]]>
</description>
<author>ugmbbc</author>
<source>cnBeta.COM</source>
<pubDate>Sat, 27 Apr 2019 09:46:45 GMT</pubDate>
<guid>https://www.cnbeta.com/articles/tech/841851.htm</guid>
</item>
文章的 HTML 代码就在上面 RSS 中的 description 标签里。解析出 RSS 中所有文章的 HTML 代码,并将它们保存到本地数据库中。
接下来,如何展示 HTML 内容呢?当时,我的第一反应就是使用 WebView 控件来展示。

WebView

使用 WebView 显示文章只需要创建一个 UIWebView 对象,进行一些基本滚动相关的设置,然后读取 HTML 字符串就可以了,具体实现代码如下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

iOS开发中,展示富文本内容是常见需求。本文介绍了在iOS开发中应对各种富文本表现需求的方法。作者首先介绍了使用UIWebView来展示富文本内容,并通过缓存图片优化展示速度。其次,作者介绍了使用NSURLProtocol来缓存文章中的图片,并展示了如何使用STMURLCache进行图片预加载。文章还提到了YYText库,该库在异步文字布局和渲染上性能优异,适用于长列表场景下的富文本展示。YYText对富文本的图文混排使用自定义的NSMutableAttributedString分类,简化了NSMutableAttributedString的描述,还增加了功能,可以嵌入UIView和CALayer。相比原生代码描述富文本,HTML代码更易读、更容易维护。作者建议在列表展示富文本时使用TextKit或YYText,其他情况可以选择使用UIWebView。总的来说,本文通过具体的代码示例和技术原理,详细介绍了在iOS开发中展示富文本内容的多种方法和优化技巧。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • WKWebView不好实现这种效果吗?UIWebView已经被苹果淘汰了啊

    作者回复: WKWebView 思路类似,使用WKURLSchemeHandler就行

    2019-05-14
    15
  • wk的NSURLProtol支持不太好,用了网上的一些方案,会导致一些奇怪的问题…。很蛋疼。现在需求里面的ajax请求都不好去拦截

    作者回复: wk 的话,可以了解下 -[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]

    2019-05-20
    4
  • Ant
    同问为啥不用 WKWebView

    作者回复: 可以用 WKWebView,思路类似,实现上用 WKURLSchemeHandler

    2019-05-15
    2
  • Happy_Home
    老师,想问一下,你的那个阅读器项目貌似也导入了DTCoreText,可是整个项目中好像并没有运用到,DTCoreText好像也是可以直接将HTML字符串转化为富文本,是出于什么原因没有使用而选择UIWebView的呢
    2019-05-14
    3
  • Ace
    YYKit的想法和方案确实不错,不过曾经在实践的时候,遇到某些不是很常见的语言里面的字符部分渲染不出来。。。不知道大家有没有遇到过,这个问题一直没有解决,后面就放弃使用YYkit了。
    2019-05-14
    3
  • Geek_e1d503
    能否有一堂苹果审核的课,梳理常见被拒原因?
    2019-05-15
    2
  • 谭鹏
    YYKit 里面的 封装runloop 和GCD的部分 非常好用
    2019-05-15
    2
  • xilie
    长列表 FPS 性能优化的问题,看到都 9102 年了,还好多文章介绍计算高度并缓存的方案,Self-Sizing 还没普及吗?大家都还手动算的吗?性能更好?
    2019-05-29
    2
    1
  • Tristan
    NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
    2019-05-15
    2
    1
  • 帅气潇洒的豆子
    铭哥,github上STMURLCache的引用的文件有点多啊,需要全部使用?
    2019-05-14
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部