19

显示大量RichText(HTML 格式)的最佳方式是什么

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

现在有几个我能想到的选项(它们都不是理想的,如果您想到任何其他选项,请在评论中发布它们):

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

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

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

    这个我考虑了很长时间,但是在阅读这篇博文时,我意识到会导致一个问题,平滑滚动。为站点提供本机应用程序的想法是,最好使用简单的 UIWebView 来查看站点的移动主题。如果应用程序在滚动时滞后并且生涩,那就更糟了(因为我需要显示隐藏 webview 的图像,就像他建议的那样不起作用)。UIWebView 也需要在主线程上创建,否则它们会中断。

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

有没有人有任何创建网络驱动应用程序的经验,比如Facebook 客户端、论坛应用程序或必须显示网站内容的新站点应用程序(我并没有真正计算 twitter 客户端,因为它只需要处理文本每个帖子的少量链接)。或者关于在 iOS 应用程序中显示 RichText 内容的最佳方式的任何想法?

任何想法都必须处理很多:

  • 多色文本。
  • 右、左和居中对齐的文本。
  • 图像(大小可变)。
  • 粗体文字。
  • 不同大小和字体的文本。
  • 下划线文本。
  • YouTube视频。
  • HTML 表格。

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

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

4

2 回答 2

3

因此,如果我没看错,您希望给定主题的论坛帖子是 UITableView 的单元格,并且单元格需要丰富的格式?

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

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

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

此外,这可能很明显(特别是因为您似乎同时具有性能和设计意识),但请不要将 UIWebView 用于 UI 控件。每当我看到 UIWebView 选项卡栏或虚假导航栏时,我都会感到畏缩(ack,Netflix)。但是,对于格式化,如果您从服务器加载大量动态内容,很多时候它是唯一的飞行方式。

于 2011-07-09T01:36:24.743 回答
2

NSAttributedString+HTML 已经支持图片的延迟加载。请参阅演示如何做到这一点的演示。它相当快,但您希望保留解析 HTML 以获取不在屏幕上的内容。

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

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

于 2011-07-18T16:54:09.573 回答