Я использовал 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. Изменение размера шрифта ios7 при создании nsattributedstring из html
  3. Как добавить CSS HTML в NSAttributedString?

Для ссылки 3 следует ли применять шрифты и теги со стороны сервера, а затем получать строку HTML?

Любая помощь будет принята !!!

12
ChintaN -Maddy- Ramani 20 Авг 2014 в 13:53
1
Если я правильно помню, проблема в том, что жирный шрифт и курсив выделены внутри NSFontAttributeName. Нет NSItalicAttributeName или NSBoldAttributeName. Один из способов сделать это - перечислить атрибуты и вдохновить вас этим: stackoverflow.com/questions/23153156/…
 – 
Larme
20 Авг 2014 в 14:53
Да, я пробовал себя и сделал то же самое :). благодаря.
 – 
ChintaN -Maddy- Ramani
20 Авг 2014 в 14:56

1 ответ

Лучший ответ

Наконец-то я получил ответ. вы можете проверить ответ 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];

Спасибо. Может, это тебе поможет.

16
Community 23 Май 2017 в 14:46