iphone - 在 iOS 应用程序中显示带有 HTML 标签的文本的最佳方式?

标签 iphone ios objective-c

目前我正在开发用于网络聊天的 iOS 客户端。因此聊天消息具有 HTML 标签(粗体、斜体、下划线、字体颜色、图像(笑脸)等)。例如:

<b>bold</b> <i>italic</i> <!--smile:bird--><img style="vertical-align: middle;border: none;" alt="bird" src="http://www.site.com/engine/data/emo_chat/bird.gif" /><!--/smile--> ordinaty text

目前我有 2 个如何显示消息的想法:

  1. 将 UIWebView 添加到表格单元格。但我认为这不是一个选择,因为我们会有很多消息和很多 WebView。
  2. 将 UITextView 添加到表格单元格,解析 HTML 标记并对属性字符串进行必要的更改。但是 UITextView 不支持图像(如果我是对的)。

是否有任何其他(更好)的方式来显示此类数据(带样式的文本 + 图像)?

最佳答案

使用 webview per-cell 不会像您怀疑的那样工作。 Webview 需要很长的时间来呈现,这意味着您可能最终会在重用的单元格中暂时显示旧的 webview 内容,直到新内容呈现为止。 Webview 也是一个相当重量级的 UI 元素,如果同时更新屏幕上的许多元素,您会遇到性能问题。

您需要使用类似 DTCoreText 的库将给定的 HTML 文本解析为属性字符串.从这里开始,如果您可以针对 iOS 6 或更高版本,您可以设置 attributedText标准属性UILabel .如果您需要针对早期的 iO​​S 版本,您可以再次使用 DTCoreText,特别是 DTAttributedLabelDTAttributedTextCell组件。

解析和NSAttributedString渲染都可以使用 XML 解析器和 CoreText 手动完成,但 DTCoreText 将使您的生活更轻松。

更新:您在评论中提到您希望支持 <img/> . DTCoreText 确实有一些基本的图像支持,但如果您使用 CoreText 渲染文本,这将是一个非常困难的问题,因为您必须使文本正确地围绕图像流动,并在核心文本渲染器中保留一些空间来放入您的图像。如果每个单元格只有一个图像,我建议您手动提取图像路径/url 并使用 UIImageView 进行布局。在您的文本旁边。

关于iphone - 在 iOS 应用程序中显示带有 HTML 标签的文本的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872921/

相关文章:

objective-c - 子菜单项不可点击

objective-c - 如何轻松重定向 NSTextView 中的控制台输出?

ios - 为什么 iPhone 7 和 iPhone 7 Plus 屏幕截图会发送与 RGB 色彩空间图像不兼容的 alpha?

iphone - 如何将 UIView 渲染到 CGContext

iphone - 在 iOS 上的 AFNetworking 中取消上传过程

ios - 如何禁用 iOS11 中 tableview 单元格的完全滑动

ios - 动画约束改变 UIViewController

iphone - 这个随机函数有什么问题?

ios - 处理游戏进入后台

ios - 有哪些方法可以在 Provisioning Portal 中自动列出 iOS 设备?