问题 将自定义字体应用于从HTML字符串转换的属性字符串


我用了 UITextView 我在哪里展示 NSAttributedString。我有 HTML 服务器的字符串。我使用下面的代码将HTML转换为NSAttributedString。

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

要应用字体,我尝试了以下2个代码。

  1. 应用属性
  2. 自定义字符串

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

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

对于Custom String,我首先在下面创建 NSString 然后隐蔽 NSAttributedString

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

使用两个代码字体已成功更改。但 大胆和斜体 不适用 强调 在NSAttributedString中应用。

我参考下面的链接。

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

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

任何帮助都会得到满足!


10518
2017-08-20 09:53


起源

如果我没记错的话,问题就是大胆和斜体的效果在里面 NSFontAttributeName。没有NSItalicAttributeName或NSBoldAttributeName。所以这样做的一个方法是枚举属性并激发你的灵感: stackoverflow.com/questions/23153156/... - Larme
@Larme是的,我尝试了自己并做了同样的事情。:)。谢谢。 - ChintaN -Maddy- Ramani


答案:


最后我得到了答案。你可以检查一下larmes的答案(从用户键入的属性字符串中查找属性)或者你可以简单地删除旧的字体属性并使用下面的代码应用新的字体。

 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];

谢谢。也许它会对你有所帮助。


14
2017-08-20 11:10