Отображение лотов RichText: выбор лучшего варианта - PullRequest
18 голосов
/ 08 июля 2011

Как лучше всего отобразить лоты RichText (в формате HTML)

В данный момент я работаю над приложением для форума.Как и следовало ожидать, посты на сайте имеют множество форматов HTML, списки, изображения полужирный текст , цветной текст и т. Д. *

Теперь есть несколько вариантов, которые я могу придумать(ни один из них не идеален, пожалуйста, если вы думаете о любых других опциях, оставьте их в комментариях):

  • Пользовательские ячейки, использующие NSAttributedString + HTML + DTAttributedTextView для каждого сообщения?

    Проблемы: я использовал HTML-категории NSAttributedString + в приложении в другом месте, и это было менее чем идеально, создание NSAttributedString кажется довольно дорогим (медленным)даже в небольших количествах.Для 10+ постов, каждая из которых может быть длиной всей статьи, будет ужасно +, хотя DTAttributedTextView поддерживает HTML-тег IMG (большинство тегов), он не поддерживает удаленную загрузку изображений, если вы не укажете их ширину и высотув теге img.А для форума, где тегом IMG может быть смайлик (10 * 10) или снимок экрана (640 * 960), нет способа предсказать это. (С момента написания этой NSAttributedString + HTML, которая теперь переименована DTCoreText , добавил полную поддержку тегов <img> и значительно улучшил!)

  • Пользовательские ячейки с UIWebView в них для каждого сообщения?

    Этот вопрос я рассматривал довольно давно, однако, читая этот пост , я понял проблему, которая может вызвать Плавная прокрутка .Идея иметь нативное приложение для сайта состоит в том, что оно лучше , чем использование простого UIWebView для просмотра мобильной темы сайта.Если приложение прокручивается и дергается при прокрутке, это хуже не лучше (также, поскольку мне нужно отображать изображения, скрывающие веб-просмотр, как он предлагает, не будет работать).Кроме того, UIWebView необходимо создать в главном потоке, или они прерываются.

  • Назад к UIWebView? Раздражающе, кроме жалкого обмана (как в Приложение iFans ), когда вы отображаете только текст, а затем, если они щелкают по нему, загружается UIWebView со всеми красивыми изображениями и т. д. ..., кажется, что единственный оставшийся вариант - делать то, что, как я думаю, приложение TapaTalk, и иметьвесь поток вид как UIWebView.Это не слишком плохо, поскольку, вероятно, будет иметь довольно хорошую производительность и позволит мне, возможно, добавлять темы, контролируемые пользователями и т. Д., Но я нахожу идею использования UIWebView на веб-сайтах native приложение отталкивающее.

Есть ли у кого-нибудь опыт создания веб-приложения, например возможно клиент Facebook, форум или новое приложение для сайта, которое должно было отображатьсяконтент с сайта (я действительно не считаю твиттер-клиента, так как он имеет дело только с текстом и ссылками в небольших количествах за пост).Или есть идеи о том, как лучше отображать содержимое RichText в приложении для iOS?

Любая идея должна иметь дело с лотом:

  • Многоцветный текст.
  • Текст вправо, влево и по центру.
  • Изображения (переменного размера).
  • Жирный текст.
  • Текст разных размеров и шрифтов.
  • Подчеркивает текст.
  • Видео YouTube.
  • HTML-таблицы.

Просто на тот случай, если реальный вопрос не был ясен во всем этом, я 'Подведем итог:

" Как лучше всего отображать большое количество содержимого RichText (в формате HTML) для клиентского приложения форума "

Ответы [ 2 ]

3 голосов
/ 09 июля 2011

Так что, если я правильно читаю, вы хотите, чтобы сообщения на форуме по данной теме были ячейками UITableView, а ячейки нуждаются в расширенном форматировании?

Предполагая, что это правильно, я предполагаю, что каждое сообщение займетвверх по экрану (большая высота ячейки).В этом случае наличие UIWebView в качестве подпредставления может быть не таким плохим с точки зрения производительности, как вы думаете.UITableView повторно использует ячейки, поэтому на самом деле в память необходимо загружать только видимые ячейки.

Я также предполагаю, что вы можете получить доступ к форуму через API, верно?В этом случае вы сможете предварительно загрузить данные непосредственно перед загрузкой представления, а UIWebViews будут использоваться только для форматирования.Вы даже можете загрузить CSS-файл из комплекта приложения, когда загружаете HTMLString в свой UIWebView, так что вы не загружаете его с сервера каждый раз.

Все это, как говорится, если у вас было много одновременно видимыхДля ячеек это может быть другая история, и я мог бы рассмотреть возможность показа только простого текста в индексе UITableView и отображения расширенного форматирования только тогда, когда пользователь нажимает на ячейку, чтобы просмотреть отдельный пост.Это также может быть лучше с точки зрения дизайна, поскольку наличие множества ячеек с различным форматированием на экране может в конечном итоге выглядеть немного небрежно.

Кроме того, это может быть очевидным (особенно если учесть, что вы не только ориентированы на производительность, но и на дизайн), но не используйте UIWebView для элементов управления пользовательским интерфейсом.Каждый раз, когда я вижу панель вкладок UIWebView или поддельную панель навигации, я сжимаюсь (ack, Netflix).Для форматирования, однако, часто это единственный способ летать, если вы загружаете много динамического контента с сервера.

2 голосов
/ 18 июля 2011

NSAttributedString + HTML уже поддерживает отложенную загрузку изображений. Посмотрите демонстрацию, которая показывает, как это сделать. Это достаточно быстро, но вы хотите провести анализ HTML для содержимого, которое не отображается на экране.

Это в основном зависит от того, какой пользовательский интерфейс вы хотите достичь. NSAS + HTML предназначен для ситуаций, когда вы контролируете качество HTML (то есть, потому что вы генерируете его самостоятельно). Там он предоставляет вам беспрецедентный уровень контроля над иерархией представлений, поскольку вы можете встраивать свои собственные настраиваемые представления для показа изображений.

В других случаях, когда вы не можете быть уверены в качестве HTML, вы должны использовать UIWebView и обойти все его ограничения, во-первых, он требует огромных объемов ОЗУ и медленного отображения содержимого. Также UIWebView не является поточно-ориентированным (потому что WebKit не является).

...