显示很多RichText:选择最佳选项

时间:2011-07-08 14:57:07

标签: iphone ios uitableview uiwebview nsattributedstring

显示RichText的批次的最佳方法是什么(HTML格式化)

目前我正在开发一个论坛应用程序。正如您所期望的那样,网站上的帖子有很多HTML格式,列表,图像粗体文字,彩色文字等......

现在我可以想到几种选择(非理想选择,如果你想到评论中的任何其他选项,请购买):

  • 每个帖子使用NSAttributedString+HTML + DTAttributedTextView的自定义单元格?

    问题:我在其他地方的应用程序中使用了NSAttributedString + HTML类别并且它不太理想,创建NSAttributedString似乎相当昂贵(慢),即使是少量。 对于10个以上的帖子,每个帖子可能是整篇文章的长度会很糟糕 +尽管DTAttributedTextView支持IMG html标签(大多数标签)它不支持远程加载图像,除非你指定它们的宽度和高度在img标签中。对于IMG标签可能是笑脸(10 * 10)或屏幕截图(640 * 960)的论坛,无法预测。 (自编写此NSAttributedString + HTML(现已重命名为DTCoreText)以来,已添加对<img>标记的完全支持并大大改进!)

  • 每个帖子中都包含UIWebView的自定义单元格?

    这个我考虑了很长一段时间,但在阅读this blog post时,我发现了一个可能导致的问题,平滑滚动。为网站提供本机应用程序的想法是更好然后使用简单的UIWebView来查看网站移动主题。如果应用程序滞后且不稳定而滚动更糟不是更好(同时我需要显示隐藏webview的图像,就像他建议不起作用)。 UIWebView也需要在主线程上创建,否则就会中断。

  • 返回UIWebView? 除了做一个可怜的作弊之外,(比如在iFans app中)你只显示文本,然后如果他们点击它,UIWebView加载所有漂亮的图像等......,唯一的选择似乎是做我认为TapaTalk应用程序做了什么,并将整个线程视图作为UIWebView。这不是坏,因为它可能会有相当不错的性能并允许我添加用户控制的主题等。但我发现在网站 native中使用UIWebView的想法 app令人厌恶。

有没有人有任何创建网络应用程序的经验,例如可能一个facebook客户端,论坛应用程序或新网站应用程序,它们必须显示来自网站的内容(我真的不算推特客户端,因为它只需要处理每个帖子少量的文本和链接)。或者有关在iOS应用中显示RichText内容的最佳方式的任何想法?

任何想法都必须处理这个问题:

  • 多彩色文字。
  • 右,左和右中心对齐的文字。
  • 图像(可变大小)。
  • 粗体文字。
  • 不同尺寸的文字&amp;字体。
  • 强调文字。
  • YouTube视频。
  • HTML表格。

以防万一实际问题不是很清楚,我会总结一下:

为论坛客户端应用显示大量RichText(HTML格式)内容的最佳方式

2 个答案:

答案 0 :(得分:3)

因此,如果我正确阅读,您希望给定主题的论坛帖子是UITableView的单元格,并且单元格需要丰富的格式化吗?

假设这是正确的,我想每个帖子将占用很多屏幕(大单元格高度)。在这种情况下,将UIWebView作为子视图可​​能并不像您想象的那样糟糕。 UITableView重用单元格,所以实际上只需要将可见单元格加载到内存中。

我还假设您可以通过API访问论坛,对吧?在这种情况下,您应该能够在加载视图之前立即预加载数据,而UIWebViews仅用于格式化。当您将HTMLString加载到UIWebView中时,您甚至可以从应用程序包中加载CSS文件,这样您就不会每次都从服务器加载它。

所有这一切,如果你确实有很多同时可见的单元格,它可能是一个不同的故事,我可能只考虑在UITableView索引中显示纯文本,并仅在用户点击单元格时显示丰富的格式查看单个帖子。从设计的角度来看,这也可能更好,因为屏幕上有大量不同格式的单元格可能最终看起来有点草率。

此外,这可能是显而易见的(特别是因为您似乎兼顾性能和设计)但请不要使用UIWebView进行UI控件。每当我看到UIWebView标签栏或假导航栏时,我都会畏缩(ack,Netflix)。但是,对于格式化,如果您从服务器加载大量动态内容,则很多时候它是唯一的飞行方式。

答案 1 :(得分:2)

NSAttributedString + HTML已经支持延迟加载图像。请参阅演示如何执行此操作的演示。它的速度相当快,但您希望能够解析不在屏幕上的内容的HTML。

这主要取决于您想要实现的UI。 NSAS + HTML适用于控制HTML质量的情况(即因为您自己生成它)。在那里,它为视图层次结构提供了前所未有的控制级别,因为您可以嵌入自己的自定义视图来显示图像。

在其他无法确定HTML质量的情况下,您必须使用UIWebView并解决所有这些限制,其中一个原因是需要大量RAM并且显示内容的速度很慢。 UIWebView也不是线程安全的(因为WebKit不是)。