目前我正在开发用于网络聊天的 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 个如何显示消息的想法:
- 将 UIWebView 添加到表格单元格。但我认为这不是一个选择,因为我们会有很多消息和很多 WebView。
- 将 UITextView 添加到表格单元格,解析 HTML 标记并对属性字符串进行必要的更改。但是 UITextView 不支持图像(如果我是对的)。
是否有任何其他(更好)的方式来显示此类数据(带样式的文本 + 图像)?
最佳答案
使用 webview per-cell 不会像您怀疑的那样工作。 Webview 需要很长的时间来呈现,这意味着您可能最终会在重用的单元格中暂时显示旧的 webview 内容,直到新内容呈现为止。 Webview 也是一个相当重量级的 UI 元素,如果同时更新屏幕上的许多元素,您会遇到性能问题。
您需要使用类似 DTCoreText 的库将给定的 HTML 文本解析为属性字符串.从这里开始,如果您可以针对 iOS 6 或更高版本,您可以设置 attributedText
标准属性UILabel
.如果您需要针对早期的 iOS 版本,您可以再次使用 DTCoreText,特别是 DTAttributedLabel
或 DTAttributedTextCell
组件。
解析和NSAttributedString
渲染都可以使用 XML 解析器和 CoreText 手动完成,但 DTCoreText 将使您的生活更轻松。
更新:您在评论中提到您希望支持 <img/>
. DTCoreText 确实有一些基本的图像支持,但如果您使用 CoreText 渲染文本,这将是一个非常困难的问题,因为您必须使文本正确地围绕图像流动,并在核心文本渲染器中保留一些空间来放入您的图像。如果每个单元格只有一个图像,我建议您手动提取图像路径/url 并使用 UIImageView
进行布局。在您的文本旁边。
关于iphone - 在 iOS 应用程序中显示带有 HTML 标签的文本的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872921/