将自定义字体应用于从HTMLstring转换的属性string

我用UITextView显示NSAttributedString 。 我从服务器得到HTMLstring。 我使用下面的代码将HTML转换为NSAttributedString。

 NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc]initWithData:[strHTML dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} documentAttributes:nil error:nil]; 

申请字体,我尝试以下2代码。

  1. 应用属性
  2. 自定义string

应用属性我使用下面的代码。

 [attrib addAttribute:NSFontAttributeName value:myFont range:NSMakeRange(0, attrib.length)]; 

对于自定义string首先我创build下面的NSString ,然后在NSAttributedStringNSAttributedString

 NSString *strHTML = [NSString stringWithFormat:@"<span style=\"font-family: myFont; font-size: 12\">%@</span>",@"my string"]; 

使用两个代码字体已成功更改。 但粗体和斜体不应用只有下划线应用在NSAttributedString中。

我参考下面的链接。

  1. iOS 7使用HTMLstring作为NSAttributedString并设置字体?
  2. 当从html创buildnsattributedstring时,ios7字体大小发生变化
  3. 如何将HTML的CSS添加到NSAttributedString?

对于链接3我应该从服务器端应用字体和标签,然后检索HTMLstring?

任何帮助将appriciated!

最后我得到了答案。 您可以检查大写答案( 查找用户键入的属性string的属性 ),或者您可以简单地删除旧的字体属性,并使用下面的代码应用新的字体。

  NSDictionary *dictAttrib = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}; NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc]initWithData:[yourHTMLString dataUsingEncoding:NSUTF8StringEncoding] options:dictAttrib documentAttributes:nil error:nil]; [attrib beginEditing]; [attrib enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrib.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { if (value) { UIFont *oldFont = (UIFont *)value; NSLog(@"%@",oldFont.fontName); /*----- Remove old font attribute -----*/ [attrib removeAttribute:NSFontAttributeName range:range]; //replace your font with new. /*----- Add new font attribute -----*/ if ([oldFont.fontName isEqualToString:@"TimesNewRomanPSMT"]) [attrib addAttribute:NSFontAttributeName value:font1 range:range]; else if([oldFont.fontName isEqualToString:@"TimesNewRomanPS-BoldMT"]) [attrib addAttribute:NSFontAttributeName value:font2 range:range]; else if([oldFont.fontName isEqualToString:@"TimesNewRomanPS-ItalicMT"]) [attrib addAttribute:NSFontAttributeName value:font3 range:range]; else if([oldFont.fontName isEqualToString:@"TimesNewRomanPS-BoldItalicMT"]) [attrib addAttribute:NSFontAttributeName value:font4 range:range]; else [attrib addAttribute:NSFontAttributeName value:font5 range:range]; } }]; [attrib endEditing]; 

谢谢。 也许它会帮助你。