[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()都可以用来格式化一大段文 ...
随机推荐
- python学习06
流控制 和函数 1)流控制 1.条件语句 if elif else if else 2.循环语句 while for 3.continue 和break continue是跳过本次循环,执行下一次循 ...
- java -jar和hadoop jar的区别
hadoop jar可以看做是java -jar的升级,可以和它一样带参数,程序一样的解析 不同的是hadoop jar运行的jar包他会依赖于hadoop安装目录下面的一些环境,并且你jar包里指定 ...
- 024_mac配置屏保命令
注意吃饭等离开工位的时候养成随时开启屏保的功能,养成信息保护的好习惯,mac如何配置屏幕保护呢? 一. 通过mac"设置"里的"Desktop & Screen ...
- 【interview】汉诺塔学递归
https://www.cnblogs.com/yanlingyin/archive/2011/11/14/2247594.html https://www.cnblogs.com/dmego/p/5 ...
- GDOI2019游记
只是提前开坑啊,CCF不要禁我赛啊QwQ 虽然才初三,不能进省队,但还是要拼一把,至少不能垫底吧. NTF和CDW两位初二巨佬都在四川省选拿了非正式选手Rank3,4,我还有什么理由去摸鱼? Day\ ...
- (转)Java语法----Java中equals和==的区别
转载地址:https://www.cnblogs.com/smyhvae/p/3929585.html 一.java当中的数据类型和“==”的含义: 基本数据类型(也称原始数据类型) :byte,sh ...
- Redis的学习
单线程架构可参考:https://blog.csdn.net/sunhuiliang85/article/details/73656830
- listagg within group
oracle 多行合并成一行: listagg within group 可以和递归方法一起使用查询路径: 例如: SELECT LISTAGG(t.FOLDER_NAME, '/') WITHIN ...
- 4.1 ORACLE DATAGUARD SWITCHOVER 步骤
验证主库是否能执行角色转换到备库 原主库执行 SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS --------- ...
- 记一次物理机安装centos7.5 出现黑屏的问题
记一次物理机安装centos7.5 出现黑屏的问题 一.问题出现 使用物理机安装centos7.5,选择Install CentOS Linux7之后,并没有出现选择语言的界面,而是只出现了一个鼠标, ...