iOS开发高手课
戴铭
前滴滴出行技术专家
立即订阅
11450 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 锚定一个点,然后在这个点上深耕
免费
基础篇 (20讲)
01 | 建立你自己的iOS开发知识体系
02 | App 启动速度怎么做优化与监控?
03 | Auto Layout 是怎么进行自动布局的,性能如何?
04 | 项目大了人员多了,架构怎么设计更合理?
05 | 链接器:符号是怎么绑定到地址上的?
06 | App 如何通过注入动态库的方式实现极速编译调试?
07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?
08 | 如何利用 Clang 为 App 提质?
09 | 无侵入的埋点方案如何实现?
10 | 包大小:如何从资源和代码层面实现全方位瘦身?
11 | 热点问题答疑(一):基础模块问题答疑
12 | iOS 崩溃千奇百怪,如何全面监控?
13 | 如何利用 RunLoop 原理去监控卡顿?
14 | 临近 OOM,如何获取详细内存分配信息,分析内存问题?
15 | 日志监控:怎样获取 App 中的全量日志?
16 | 性能监控:衡量 App 质量的那把尺
17 | 远超你想象的多线程的那些坑
18 | 怎么减少 App 电量消耗?
19 | 热点问题答疑(二):基础模块问题答疑
20 | iOS开发的最佳学习路径是什么?
应用开发篇 (12讲)
21 | 除了 Cocoa,iOS还可以用哪些 GUI 框架开发?
22 | 细说 iOS 响应式框架变迁,哪些思想可以为我所用?
23 | 如何构造酷炫的物理效果和过场动画效果?
24 | A/B 测试:验证决策效果的利器
25 | 怎样构建底层的发布和订阅事件总线?
26 | 如何提高 JSON 解析的性能?
27 | 如何用 Flexbox 思路开发?跟自动布局比,Flexbox 好在哪?
28 | 怎么应对各种富文本表现需求?
29 | 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发?
30 | 如何制定一套适合自己团队的 iOS 编码规范?
31 | iOS 开发学习资料和书单推荐
32 | 热点问题答疑(三)
原理篇 (6讲)
33 | iOS 系统内核 XNU:App 如何加载?
34 | iOS 黑魔法 Runtime Method Swizzling 背后的原理
35 | libffi:动态调用和定义 C 函数
36 | iOS 是怎么管理内存的?
37 | 如何编写 Clang 插件?
38 | 热点问题答疑(四)
原生与前端共舞 (5讲)
39 | 打通前端与原生的桥梁:JavaScriptCore 能干哪些事情?
40 | React Native、Flutter 等,这些跨端方案怎么选?
41 | 原生布局转到前端布局,开发思路有哪些转变?
42 | iOS原生、大前端和Flutter分别是怎么渲染的?
43 | 剖析使 App 具有动态化和热更新能力的方案
用户故事 (1讲)
用户故事 | 我是如何学习这个专栏的?
结束语 (1讲)
结束语 | 慢几步,深几度
iOS开发高手课
登录|注册

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

戴铭 2019-05-14
你好,我是戴铭。今天,我要和你分享的主题是,在 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《iOS开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

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

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

    2019-05-14
    7
  • Happy_Home
    老师,想问一下,你的那个阅读器项目貌似也导入了DTCoreText,可是整个项目中好像并没有运用到,DTCoreText好像也是可以直接将HTML字符串转化为富文本,是出于什么原因没有使用而选择UIWebView的呢
    2019-05-14
    3
  • Ace
    YYKit的想法和方案确实不错,不过曾经在实践的时候,遇到某些不是很常见的语言里面的字符部分渲染不出来。。。不知道大家有没有遇到过,这个问题一直没有解决,后面就放弃使用YYkit了。
    2019-05-14
    3
  • Ant
    同问为啥不用 WKWebView

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

    2019-05-15
    2
  • Geek_e1d503
    能否有一堂苹果审核的课,梳理常见被拒原因?
    2019-05-15
    2
  • 谭鹏
    YYKit 里面的 封装runloop 和GCD的部分 非常好用
    2019-05-15
    2
  • Tristan
    NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
    2019-05-15
    1
    1
  • 戒惜舍得
    大神马上就到TDD BDD 了。大神,基于国内大部分iOS开发者没有使用TDD的现状,大神可以加长篇幅吗? 猫神oneVcat 和轮子 哥 vczh 都很重视TDD。已经不是一次,cto要求做TDD . 这几年到了一个新公司cto 或者技术领导开始就会要求TDD,或者要求写测试。由于大神较多识广,可否为广大开发者指点迷津。
    2019-05-14
    1
    1
  • opooc
    铭哥,github上STMURLCache的引用的文件有点多啊,需要全部使用?
    2019-05-14
    1
  • Sun0010
    - (NSCachedURLResponse *)localCacheResponeWithRequest:(NSURLRequest *)request
    if (isExist == nil) {
                [self.responseDic setValue:[NSNumber numberWithBool:TRUE] forKey:request.URL.absoluteString];
                NSURLSession *session = [NSURLSession sharedSession];
                NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                    if (error) {
                        cachedResponse = nil;
                    } else {
                        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%f",[date timeIntervalSince1970]],@"time",response.MIMEType,@"MIMEType",response.textEncodingName,@"textEncodingName", nil];
                        BOOL resultO = [dic writeToFile:otherInfoPath atomically:YES];
                        BOOL result = [data writeToFile:filePath atomically:YES];
                        if (resultO == NO || result == NO) {
                        } else {
                        }
                        cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:data];
                    }
                }];
                [task resume];
                return cachedResponse;
            }
            return nil;


    因为 [session dataTaskWithRequest:request completionHandler:^]是异步请求,所以 cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:data]; 其实是没什么效果?
    2019-08-09
  • findU
    老师,WKURLSchemeHandler是再11.0之后才支持的API,而且如果用WK使用NSURLProtocol做静态资源缓存的话需要处理苹果的私有API(存在一定的被拒风险)。
    2019-07-04
  • tomcat
    一个自定义的NSURLProtocol处理一种事情,如果想拦截一个网络请求,然后经过层层自定义NSURLProtocol,功耗和效率有比较大的影响吗?
    2019-06-06
  • xilie
    长列表 FPS 性能优化的问题,看到都 9102 年了,还好多文章介绍计算高度并缓存的方案,Self-Sizing 还没普及吗?大家都还手动算的吗?性能更好?
    2019-05-29
    1
  • xilie
    看了下 Github YYText 的代码是 3 年前的,几百个没关的 issues,没维护了吗?这个库还适合现在用吗?
    2019-05-29
    1
  • wk的NSURLProtol支持不太好,用了网上的一些方案,会导致一些奇怪的问题…。很蛋疼。现在需求里面的ajax请求都不好去拦截

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

    2019-05-20
  • 我想问下关于富文本里包含<img scr='http:xxx'> 这种该怎么处理呢,尤其是在长列表里
    2019-05-14
收起评论
16
返回
顶部