1. ホーム
  2. html

[解決済み] NSAttributedTextへのHTMLのパース - フォントを設定するには?

2022-04-30 14:03:06

質問

iPhoneでUITableViewCellにhtmlでフォーマットされたテキストのスニペットをきれいに表示させようと思っています。

今のところ、こんな感じです。

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で何かを設定する必要があると思っていますが、どこにも例が見当たりません。

どうすればいいですか?

解決しました。ちょっと面倒だし、ベストな答えではないかもしれませんが。

このコードは、すべてのフォントの変更を通過します。フォントに "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];
    }];