[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(4, 3)]; //颜色 //文字的颜色 形如:红色的字 [attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor orangeColor] range:NSMakeRange(0, attrStr.length)]; //文字背景颜色 形如:红色背景的字 [attrStr addAttribute:NSBackgroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, attrStr.length)]; //下划线 下划线的字 [attrStr addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:NSMakeRange(4, 3)]; //删除线 带删除线的字 //黑色删除线 [attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(4, 3)]; //也可以自定义删除线的颜色 [attrStr addAttribute:NSStrikethroughColorAttributeName value:[UIColor redColor] range:NSMakeRange(4, 3)]; /* 调整到基准线的距离 用于 比如前面字体比后面的字体要大,但是需要小字体的内容垂直方向上居中 value为正向上偏,为负向下偏
*/ [attrStr addAttribute:NSBaselineOffsetAttributeName
value:@(10.0) //此处上移的距离可以根据 0.5*(大字体字号-小字体字号) 来大致推算
range:NSMakeRange(3, 2)];
//段落,行距等格式 //需要先建立一个格式的数据 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; // 行间距 paragraphStyle.lineSpacing = 15; // 段落间距(以换行符为判断段落的依据) paragraphStyle.paragraphSpacing = 30; // 段落缩进像素 paragraphStyle.firstLineHeadIndent = 40; // 整体缩进像素 paragraphStyle.headIndent = 15; // 对齐方式 paragraphStyle.alignment = NSTextAlignmentLeft;
//为富文本添加格式 [attrStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, 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 = 5; para.paragraphSpacing = 10; [attStr addAttribute:NSParagraphStyleAttributeName value:para range:NSMakeRange(0, attStr.length)]; //颜色 [attStr addAttribute:NSForegroundColorAttributeName value:HEXCOLOR(0x9b9b9b) range:NSMakeRange(0, attStr.length)]; //字体 [attStr addAttribute:NSFontAttributeName value:MFPFFONT_REGULAR(12) range:NSMakeRange(0, attStr.length)]; return attStr; }