[OC] 富文本 AttributedString 以及 用富文本解析html文本
AttributedString
为了便于添加新属性,我们一般初始化 NSMutableAttributedString 类型的富文本。
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"我是一个富文本"];
当然attrStr还有很多其他的初始化方法,比如initWithData之类的,可以望文生义,不在此赘述。
下面是为富文本增加各种属性的方法,在这里先说明几个数据类型的意义:
① NSMakeRange(X, Y) 从X位开始,长度为Y个字符/汉字的范围。注意字符串的下标是从0开始的。
//修改字体 很显然改字体
[attrStr addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:30.0f]
range:NSMakeRange(, )]; //颜色
//文字的颜色 形如:红色的字
[attrStr addAttribute:NSForegroundColorAttributeName
value:[UIColor orangeColor]
range:NSMakeRange(, attrStr.length)];
//文字背景颜色 形如:红色背景的字
[attrStr addAttribute:NSBackgroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(, attrStr.length)]; //下划线 下划线的字
[attrStr addAttribute:NSUnderlineStyleAttributeName
value:@(NSUnderlineStyleSingle)
range:NSMakeRange(, )]; //删除线 带删除线的字
//黑色删除线
[attrStr addAttribute:NSStrikethroughStyleAttributeName
value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle)
range:NSMakeRange(, )];
//也可以自定义删除线的颜色
[attrStr addAttribute:NSStrikethroughColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(, )]; /*
调整到基准线的距离
用于 比如前面字体比后面的字体要大,但是需要小字体的内容垂直方向上居中
value为正向上偏,为负向下偏
*/
[attrStr addAttribute:NSBaselineOffsetAttributeName
value:@(10.0) //此处上移的距离可以根据 0.5*(大字体字号-小字体字号) 来大致推算
range:NSMakeRange(3, 2)];
//段落,行距等格式
//需要先建立一个格式的数据
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
// 行间距
paragraphStyle.lineSpacing = ;
// 段落间距(以换行符为判断段落的依据)
paragraphStyle.paragraphSpacing = ;
// 段落缩进像素
paragraphStyle.firstLineHeadIndent = ;
// 整体缩进像素
paragraphStyle.headIndent = ;
// 对齐方式
paragraphStyle.alignment = NSTextAlignmentLeft;
//为富文本添加格式
[attrStr addAttribute:NSParagraphStyleAttributeName
value:paragraphStyle
range:NSMakeRange(, attrStr.length)];
用富文本解析html文本
//html文本处理函数,输入html文本内容
- (NSAttributedString *)attributedStringWithHTMLString:(NSString *)htmlString
{
//转换参数
NSDictionary *options = @{ NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute :@(NSUTF8StringEncoding) };
//将html文本转换为正常格式的文本
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:options documentAttributes:nil error:nil];
//以下三个设置其实不是必要的,只是为了让解析出来的html文本更好看。
//设置段落格式
NSMutableParagraphStyle *para = [[NSMutableParagraphStyle alloc] init];
para.lineSpacing = ;
para.paragraphSpacing = ;
[attStr addAttribute:NSParagraphStyleAttributeName value:para range:NSMakeRange(, attStr.length)];
//颜色
[attStr addAttribute:NSForegroundColorAttributeName
value:HEXCOLOR(0x9b9b9b)
range:NSMakeRange(, attStr.length)];
//字体
[attStr addAttribute:NSFontAttributeName
value:MFPFFONT_REGULAR()
range:NSMakeRange(, attStr.length)];
return attStr;
}
[OC] 富文本 AttributedString 以及 用富文本解析html文本的更多相关文章
- CDATA(不应由XML解析器进行解析的文本数据)、CDATA的使用场景
1.1. CDATA: CDATA(Unparsed Character Data)指的是不应由XML解析器进行解析的文本数据. 因为XML解析器会将“<”(新元素的开始)和“&”(字符 ...
- BERT解析及文本分类应用
目录 前言 BERT模型概览 Seq2Seq Attention Transformer encoder部分 Decoder部分 BERT Embedding 预训练 文本分类试验 参考文献 前言 在 ...
- jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等
简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...
- AWS机器学习初探(2):文本翻译Translate、文本转语音Polly、语音转文本Transcribe
AWS机器学习初探(1):Comprehend - 自然语言处理服务 这几个服务的功能和使用都很直接和简单,因此放在一篇文章中介绍. 1. 文本翻译服务 Translate 1.1 功能介绍 AWS ...
- 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作
目录 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 NLP相关的文本预处理 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 之所以心血来潮想写这篇博客,是因为最近在关注N ...
- cut命令用于按“列”提取文本字符,格式为“cut [参数] 文本”
8.cut命令 cut命令用于按"列"提取文本字符,格式为"cut [参数] 文本". 在Linux系统中,如何准确地提取出最想要的数据,这也是我们应该重点学习 ...
- iOS - 富文本AttributedString
最近项目中用到了图文混排,所以就研究了一下iOS中的富文本,打算把研究的结果分享一下,也是对自己学习的一个总结. 在iOS中或者Mac OS X中怎样才能将一个字符串绘制到屏幕上呢? ...
- Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比
pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...
- textwrap——文本包裹和填充模块解析
textwrap模块提供了两个函数wrap()和fill(),以及TextWrapper类,以及另外一个工具函数dedent(). wrap()以及fill()都可以用来格式化一大段文 ...
随机推荐
- 使用Docker+Jenkins自动构建部署
环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...
- 细说java系列之HashMap原理
目录 类图 源码解读 总结 类图 在正式分析HashMap实现原理之前,先来看看其类图. 源码解读 下面集合HashMap的put(K key, V value)方法探究其实现原理. // 在Hash ...
- css 修改placeholder的颜色
input::-webkit-input-placeholder { color: #ff0000; } input::-moz-input-placeholder { color: #ff0000; ...
- js中的 Date对象 在 IOS 手机中的兼容性问题
项目中有个时间相关的需求,很自然的用到了 js 中的 new Date() 获取时间,浏览器使用模拟手机模式访问没有问题,但是真机测试时发现,ios系统的手机无法显示时间. 定位问题发现是 new D ...
- vue项目的常用配置代码
{ // 针对vue的格式化配置----依赖eslint.prettier.vetur等插件 // 强制单引号 "prettier.singleQuote": true, &quo ...
- 解决无法打开myeclipse-->“The default workspace'D: /myeclipse spaceis in use or cannot be created. Please choose a different one”
解决方法:到工作空间中删除.metadata文件夹中的.lock文件 如果提示无法删除,到任务管理器中关闭java进程:
- cadence学习二----->Allegro基本概念
Class与Subclass 同一根线在不同的Subclass里的含义不一样,下面介绍常用Class和Subclass的含义 1.Etch 包括TOP和BOTTOM,用于走线和覆铜 2.Package ...
- 【easy】101. Symmetric Tree
判断一棵二叉树是否对称 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...
- Mysql 反向解析 导致远程访问慢
在云端部署了mysql后,发现远程连接的响应速度非常慢(3-10s) 但是在本地访问数据库却没有问题 经过一番google这才知道原来mysql默认会进行反向解析,即通过ip地址反向向ISP申请获取域 ...
- JAVA 类的定义(定义一个类,来模拟“学生”)
package Code413;/*定义一个类,来模拟“学生”属性 (是什么) 姓名 年龄行为(能做什么) 吃饭 睡觉 学习对应到Java的类当中 成员变量(属性) String nanme; //姓 ...