NSAttributedString загружает html с изображениями

Я пытаюсь отобразить html-документ с NSAttributedString в iOS 7 (в рамках исследования альтернатив UIWebView). Вот код:

NSData *htmlData = [NSData dataWithContentsOfFile:self.chapterPath];

NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:htmlData
                                                                  options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} 
                                                       documentAttributes:nil error:nil];

self.readerTextView.attributedText = attrString;
self.readerTextView.editable = NO;

И изображения не отображались. Можно ли отображать HTML с изображениями, используя этот подход, или я пропустил некоторые параметры или атрибуты? Спасибо.

ОБНОВЛЕНИЕ:

Некоторые из тегов, которые не отображались:

<img src="images/cover.jpg" alt="cover" style="height: 100%"/>

person skyylex    schedule 22.07.2014    source источник
comment
Где вы рендерите HTML? Почему HTML-код должен находиться внутри строки с атрибутами, если его будет содержать обычная строка?   -  person trojanfoe    schedule 22.07.2014
comment
Я пытаюсь отобразить в UITextView. iOS 7 представила поддержку HTML для строки NSAttributed   -  person skyylex    schedule 22.07.2014
comment
Конечно, это просто стиль текста HTML, а не полная поддержка HTML 5?   -  person trojanfoe    schedule 22.07.2014
comment
Просто тег ‹img›.   -  person skyylex    schedule 22.07.2014
comment
Итак, вы ожидаете, что UITextView будет извлекать данные изображения из любого места, где ему указывает тег img, и отображать изображение? Я думаю, вам нужно немного больше узнать о том, какие функции HTML поддерживаются, а какие нет (и, как я уже сказал, я почти уверен, что это будет ограничено стилем текста).   -  person trojanfoe    schedule 22.07.2014
comment
Да. В документации это было довольно размыто описано: механизм импорта HTML предназначен для реализации чего-то вроде уценки (то есть стилей текста, цветов и т. д.), а не для общего импорта HTML. (developer.apple.com/library/ios /documentation/uikit/reference/) И в связи с этим хочу уточнить, возможно это или нет.   -  person skyylex    schedule 22.07.2014
comment
Но учитывая, что поддержка находится в классе NSAttributedString, разумно предположить, что он может поддерживать только функции HTML, которые могут быть выражены в строке с атрибутами, и это исключает поддержку изображений. То, что вы хотите, это веб-просмотр.   -  person trojanfoe    schedule 22.07.2014
comment
trojanfoe, вы правы. NSAttributedString при загрузке этого html не содержит ничего, связанного с изображением.   -  person skyylex    schedule 22.07.2014
comment
trojanfoe, к сожалению, я ошибся, таким образом можно отображать изображения.   -  person skyylex    schedule 22.07.2014
comment
Тег ‹img› отлично работает с указанными атрибутами ширины и высоты и не отображает изображение без этих атрибутов размера.   -  person Gennadiy Ryabkin    schedule 24.02.2021


Ответы (2)


Можно отображать HTML с изображениями, используя NSAttributedString. Проблема в атрибуте "src". Я думаю, что относительная ссылка не работает. Допускаются полные ссылки через file:// или на интернет-ресурс через http/https.

Статья с рабочим примером:

http://initwithfunk.com/blog/2013/09/29/easy-markdown-rendering-with-nsattributedstring-on-ios-7/ https://github.com/ericallam/MarkyMark

person skyylex    schedule 22.07.2014

Включение тега кажется допустимым в iOS 14, но не в Mac Catalyst 14, вызов NSAttributedString не работает. Из документов для NSAttributedString: вызов из основного потока работает (но все же может истечь время ожидания, если HTML содержит ссылки на внешние ресурсы, чего следует избегать любой ценой). Механизм импорта HTML предназначен для реализации чего-то вроде уценки (то есть стилей текста, цветов и т. д.), а не для общего импорта HTML.

person Dan Costin    schedule 08.12.2020