[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;
}

 

posted @ 2018-06-21 10:36  Oran  阅读(1868)  评论(0编辑  收藏  举报