【问题标题】:Displaying Lots Of RichText : Choosing the best option显示大量富文本:选择最佳选项
【发布时间】:2011-10-01 08:41:47
【问题描述】:

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

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

现在有几个我能想到的选项(没有一个是理想的,如果您想到任何其他选项,请将它们发布在 cmets 中):

  • 每个帖子使用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 来查看网站的移动主题。如果应用程序在滚动时滞后并且生涩,那更糟糕 不会更好(因为我需要显示隐藏 web 视图的图像,就像他建议的那样不起作用)。 UIWebView 也需要在主线程上创建,否则它们会中断。

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

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

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

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

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

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

【问题讨论】:

    标签: iphone ios uitableview uiwebview nsattributedstring


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 是的,我也很不喜欢假的 HMTL UIKit 控件。感谢您的回答,在阅读了您的评论后,我测试了在表格视图单元格中使用 UIWebView。虽然它运行得很好,但每次调用都必须在我滚动到它时重新加载它的内容,并且滚动时它非常生涩。因此,我可能会为富文本使用 UIWebView(尽管使用 javascript、自定义缓存策略和自定义上下文菜单进行了自定义)。我真的希望 Apple 将 OSX 文本引擎引入 iOS,并提供完整的富文本编辑支持。
    • 我会等待一段时间,看看是否有人制作了类似的应用程序,然后再将其标记为已回答。
    • 经过几次测试后,我很遗憾地说 BY FAR 性能最佳的选项是 UIWebView。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2012-10-31
      • 2012-06-03
      • 2013-11-07
      • 1970-01-01
      相关资源
      最近更新 更多