Подтвердить что ты не робот

Отображение большого количества RichText: выбор наилучшего варианта

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

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

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

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

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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