Я использую экземпляр UIWebView
для обработки некоторого текста и его правильного цвета, он дает результат в виде HTML, но вместо того, чтобы отображать его в виде, который UIWebView
я хочу отобразить, используя Core Text
с NSAttributedString
.
Я могу создавать и рисовать, NSAttributedString
но я не уверен, как я могу преобразовать и отобразить HTML в приписанную строку.
Я понимаю, что в Mac OS X NSAttributedString
есть initWithHTML:
метод, но это было только дополнение для Mac и недоступно для iOS.
Я также знаю, что на этот вопрос есть похожий вопрос, но у него не было ответов, хотя я бы попробовал еще раз и посмотрел, создал ли кто-нибудь способ сделать это, и если да, то если бы он мог поделиться им.
Ответы:
В iOS 7 UIKit добавил
initWithData:options:documentAttributes:error:
метод, который может инициализироватьNSAttributedString
использование HTML, например:В Свифте:
источник
Существует работу в прогрессе с открытым исходным кодом дополнение к NSAttributedString Оливера Drobnik на Github. Он использует NSScanner для разбора HTML.
источник
Создание NSAttributedString из HTML должно быть сделано в главном потоке!
Обновление. Оказывается, что HTML-рендеринг NSAttributedString зависит от встроенного WebKit и должен выполняться в главном потоке, иначе это может привести к аварийному завершению работы приложения с SIGTRAP .
Новый журнал ошибок Relic:
Ниже представлено обновленное потоковое расширение Swift 2 String:
Использование:
Вывод:
источник
Расширение инициализатора Swift для NSAttributedString
Я хотел добавить это как расширение,
NSAttributedString
а неString
. Я попробовал это как статическое расширение и инициализатор. Я предпочитаю инициализатор, который я включил ниже.Swift 4
Swift 3
пример
источник
guard ... NSMutableAttributedString(data:...
егоtry self.init(data:...
(и добавьтеthrows
в init)Это
String
расширение написано в Swift для возврата строки HTML какNSAttributedString
.Использовать,
Выше я специально добавил юникод, чтобы показать, что он правильно отображает юникод.
Тривиальное: кодировка по умолчанию, которая
NSAttributedString
используетNSUTF16StringEncoding
(не UTF8!).источник
Сделал некоторые изменения в решении Эндрю и обновил код до Swift 3:
Этот код теперь использует UITextView
self
и может наследовать свой оригинальный шрифт, размер шрифта и цвет текстаПримечание:
toHexString()
это расширение отсюдаПример использования:
источник
Версия Swift 3.0 Xcode 8
источник
Swift 4
использование
источник
Единственное решение, которое у вас есть сейчас, - это анализ HTML, создание некоторых узлов с заданными атрибутами point / font / etc, а затем объединение их вместе в NSAttributedString. Это много работы, но если все сделано правильно, может быть многоразовым в будущем.
источник
Вышеупомянутое решение является правильным.
Но приложение вылетает, если вы запускаете его на iOS 8.1,2 или 3.
Чтобы избежать сбоев, вы можете сделать это: запустите это в очереди. Так что это всегда будет в главном потоке.
источник
Использование NSHTMLTextDocumentType является медленным и трудно управлять стилями. Я предлагаю вам попробовать мою библиотеку, которая называется Atributika. У него есть свой очень быстрый HTML-парсер. Также вы можете иметь любые имена тегов и определить любой стиль для них.
Пример:
Вы можете найти его здесь https://github.com/psharanda/Atributika
источник
Свифт 3 :
Попробуйте это :
И для использования:
источник
Полезные расширения
Вдохновленный этой теме, стручок, и пример ObjC Эрики Sadun в IOS Gourmet Cookbook с.80, я написал расширение на
String
иNSAttributedString
идти вперед и назад между HTML-равнинных строк и NSAttributedStrings и наоборот - на GitHub здесь , что Я нашел полезным.Эти подписи являются (опять же , полным кодом в Сущности, ссылке выше):
источник
со шрифтом
в качестве альтернативы вы можете использовать версии, из которых это было получено, и установить шрифт в UILabel после установки attribute.String.
источник
Встроенное преобразование всегда устанавливает цвет текста в UIColor.black, даже если вы передаете словарь атрибутов с установленным значением .forgroundColor. Чтобы поддержать режим DARK на iOS 13, попробуйте эту версию расширения на NSAttributedString.
источник