Я пытаюсь получить фрагмент текста, отформатированный в html, для удобного отображения на iPhone в UITableViewCell.
Пока у меня есть это:
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, но я нигде не могу найти никаких примеров.
Ответы:
Версия Swift 2 , основанная на ответе Хавьера Керола
Swift 3.0 и iOS 9+
Swift 5 и iOS 11+
источник
font-family: '-apple-system', 'HelveticaNeue';
(который работает, а также имеет обратную совместимость). Если вы поддерживаете только iOS9,font-family: -apple-system;
можно использоватьcolor: #000000
. См. Эту ссылку для преобразования UIColor в шестнадцатеричную строку: gist.github.com/yannickl/16f0ed38f0698d9a8ae7Таким образом, вам не нужно указывать, какой шрифт вы хотите, он будет принимать шрифт и размер метки.
источник
NSUnicodeStringEncoding
а затем кодируете данные обратно в символы с помощьюNSUTF8StringEncoding
. Это нормально?Я действительно нашел рабочее решение этой проблемы:
Изменение шрифта в строке ответа HTML до его анализа.
Пример:
Swift версия:
источник
Догадаться. Медвежонок, и, может быть, не лучший ответ.
Этот код выполнит все изменения шрифтов. Я знаю, что для шрифтов используются «Times New Roman» и «Times New Roman BoldMT». Но, тем не менее, это найдет жирные шрифты и позволит мне их сбросить. Я также могу сбросить размер, пока нахожусь.
Я искренне надеюсь / думаю, что есть способ настроить это во время синтаксического анализа, но я не могу его найти, если он есть.
источник
Более общий подход - смотреть на черты шрифта при перечислении и создавать шрифт с такими же чертами (жирный, курсив и т. Д.):
источник
Да, есть решение попроще. Установите шрифт в исходнике html!
Надеюсь это поможет.
источник
Swift 4+ обновление расширения UILabel
iOS 9+
источник
Вышеупомянутые ответы работают нормально, если вы выполняете преобразование одновременно с созданием файла
NSAttributedString
. Но я думаю, что лучшим решением, которое работает с самой строкой и поэтому не требует доступа к вводу, является следующая категория:Использовать как:
Работает на iOS 7+
источник
Улучшение раствора Виктора, включая цвет:
Для этого вам также понадобится YLColor.swift преобразования uicolor в шестнадцатеричный https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7
источник
Использование NSHTMLTextDocumentType медленное и сложное для управления стилями. Предлагаю вам попробовать мою библиотеку, которая называется Атрибутика. Имеет собственный очень быстрый парсер. Также вы можете иметь любые имена тегов и определять для них любой стиль.
Пример:
Вы можете найти его здесь https://github.com/psharanda/Atributika
источник
Объединив все ответы, я сделал два расширения, которые позволяют устанавливать метку с текстом html. Некоторые ответы выше неправильно интерпретировали семейство шрифтов в приписываемых строках. Другие были неполными для моих нужд или потерпели неудачу в других отношениях. Дайте мне знать, если вы хотите, чтобы я что-то улучшил.
Я надеюсь, что это поможет кому-то.
источник
UILabel
иUITextView
. Спасибо!Спасибо за ответы, расширение мне очень понравилось, но я еще не перешел на быстрое. Для тех старшеклассников, которые все еще учатся на Objective-C, это должно немного помочь: D
Удачного кодирования! - Грег Фрейм
источник
Расширение Swift 3 String, включая шрифт nil. Свойство без шрифта взято из другого вопроса SO, не помню, какой :(
источник
Вот расширение для NSString, которое возвращает NSAttributedString с использованием Objective-C.
Он правильно обрабатывает строку с тегами HTML и устанавливает желаемый шрифт и цвет шрифта, сохраняя при этом теги HTML, включая BOLD, ITALICS ...
Лучше всего, что он не полагается на какие-либо маркеры HTML для установки атрибутов шрифта.
источник
На самом деле существует еще более простой и чистый способ. Просто установите шрифт после разбора HTML:
источник