【问题标题】:What's the best solution to display HTML Content combined with native Content on iOS?在 iOS 上显示 HTML 内容和原生内容的最佳解决方案是什么?
【发布时间】:2015-09-10 10:54:56
【问题描述】:

我正在寻找一个在 iOS 上显示 HTML 内容与 iOS 上的原生内容相结合的好解决方案

例如在我的新闻应用中,DetailView 看起来像:

  • 标题:本机 UILabel
  • 图片库:带分页的原生 ScrollView
  • 文章 HTML 的内容(第一部分);可以包括外部嵌入,如 Twitter、Facebook
  • 原生横幅视图
  • 文章 HTML 的内容(最后一部分);可以包括外部嵌入,如 Twitter、Facebook
  • 相关文章,原生 UIView

这变得非常复杂,因为我必须将 UIWebView 放入 Scrollview:可滚动内容到可滚动内容中。每个Webview的高度需要手动设置。

实现这一点的最佳解决方案是什么?有替代品吗?其他新闻应用程序如何做到这一点(如 NewsRepublic)?

【问题讨论】:

    标签: html ios objective-c


    【解决方案1】:

    使用表格视图或集合视图(就像 NewsRepublic 一样) 您将拥有要显示的类型的单元格 例如:

    标题:原生 UILabel - 基本表格视图单元格

    图片库:带分页的原生 ScrollView - 带页面控制器的 Tableview 单元

    文章 HTML 的内容(第一部分);带有 NSAttributed 字符串(或 webview)的 UITableview 单元格 等等。

    请注意,在单元格中使用 UIWebView 会对滚动性能产生负面影响,因此我会使用一个库来从中创建 NSAttributedString,例如 this

    从 ios 8 开始,您可以仅使用自动布局和自动尺寸轻松设置具有动态单元格高度的表格视图:

    tableView.rowHeight = UITableViewAutomaticDimension
    

    【讨论】:

      【解决方案2】:

      尝试根据您的要求创建单独的子视图视图,然后将它们添加到 UICollectionView 并在屏幕上显示该集合视图。 将您的视图分成更小的subViews,然后将它们加在一起。

      根据您的问题,您的子视图可以是:

      • 标题视图(包含UILabel
      • 图库(可以使用UIScrollViewUICollectionView
      • UIWebView
      • UIview 用于横幅

      ...等等...

      UICollectionView 中的上述子视图添加为单元格。

      【讨论】:

      • 但是我总是要定义每个 CollectionView 的高度,然后计算每个 WebView 的高度?
      • 是的,这是唯一的办法:)
      【解决方案3】:

      使用 CollectionView 或 TableView。

      在 Cell 中添加 Webview、Label 和 textField 并设置 UserInteractionEnable NO。

      将所有单元格的动态高度设置为要求。

      【讨论】:

        【解决方案4】:

        结合原生内容显示HTML内容的最佳解决方案是使用RTLabel

        RTLabel 的工作方式与 UILabel 类似,但支持用于富文本显示的类似 html 的标记。它基于 Core Text,所以它支持 Core Text 支持的一些东西。

        您可以从以下链接获取。

        https://github.com/honcheng/RTLabel

        【讨论】: