一尘不染

将HTML解析为NSAttributedText-如何设置字体?

html

我正在尝试获取以html格式格式化的文本片段,以在UITableViewCell中的iPhone上很好地显示。

到目前为止,我有这个:

NSError* error;
NSString* source = @"<strong>Nice</strong> try, Phil";
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithData:[source dataUsingEncoding:NSUTF8StringEncoding]
                                                           options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                     NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
                                                              documentAttributes:nil error:&error];

这种作品。我得到一些加粗的“ Nice”文字!但是…它还将字体设置为Times
Roman!这不是我想要的字体。我想我需要在documentAttributes中设置一些内容,但是,我在任何地方都找不到任何示例。


阅读 701

收藏
2020-05-10

共1个答案

一尘不染

弄清楚了。有点负担,也许不是最佳答案。

此代码将经历所有字体更改。我知道它使用的字体为“ Times New Roman”和“ Times New Roman
BoldMT”。但是无论如何,这都会找到粗体并让我重置它们。我也可以在设置时重置大小。

老实说,我希望/认为有一种方法可以在解析时进行设置,但是如果有的话,我找不到它。

    NSRange range = (NSRange){0,[str length]};
    [str enumerateAttribute:NSFontAttributeName inRange:range options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(id value, NSRange range, BOOL *stop) {
        UIFont* currentFont = value;
        UIFont *replacementFont = nil;

        if ([currentFont.fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location != NSNotFound) {
            replacementFont = [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:25.0f];
        } else {
            replacementFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:25.0f];
        }

        [str addAttribute:NSFontAttributeName value:replacementFont range:range];
    }];
2020-05-10