You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UITextView中完整渲染Markdown元素(含特殊公式)

在UITextView中完整渲染Markdown(含数学公式)的解决方案

问题根源

你当前指定的.inlineOnlyPreservingWhitespace语法解析集仅支持行内Markdown元素(比如粗体、链接),完全不处理标题、列表、段落换行这类块级元素,这就是大部分格式失效的核心原因。另外,默认解析逻辑不包含数学公式支持,需要单独开启。

解决步骤

1. 切换到完整Markdown语法解析集

把interpretedSyntax改成.full或者.standard,这两个语法集支持所有标准Markdown块级+行内元素:

  • .full:支持所有Apple实现的Markdown语法(包括扩展功能)
  • .standard:严格遵循CommonMark标准

2. 开启数学公式支持

iOS 16及以上版本支持LaTeX格式的数学公式,需要在解析选项中添加.inlineMath和.displayMath语法,同时要确保文本使用支持数学符号的字体(比如SF Pro Math)。

3. 修正UITextView基础设置

确保UITextView的isEditable设为false(如果只是展示用),textContainer.lineBreakMode设为.byWordWrapping,避免文本挤成一行。

完整可运行代码示例

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var instructionsTextView: UITextView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 包含所有需要测试的Markdown元素(含数学公式)
        let mdString = """
# 一级标题
这是普通段落文本。
* 无序列表项1
* 无序列表项2
**粗体文本**
*斜体文本*
## 二级标题
[Apple链接](https://www.apple.com)
### 数学公式示例
行内公式:$E=mc^2$
块级公式:
$$
\\sum_{i=1}^n i = \\frac{n(n+1)}{2}
$$
"""
        
        // 配置完整Markdown解析选项,包含数学公式支持
        var syntax = AttributedString.MarkdownSyntaxSet.full
        syntax.formula.inlineMath = true
        syntax.formula.displayMath = true
        
        let options = AttributedString.MarkdownParsingOptions(
            interpretedSyntax: syntax,
            allowsExtendedAttributes: true
        )
        
        // 转换为富文本,指定数学字体
        do {
            var attributedText = try AttributedString(markdown: mdString, options: options)
            // 全局设置支持数学符号的字体
            attributedText.font = UIFont(name: "SF Pro Math", size: 16) ?? .systemFont(ofSize: 16)
            instructionsTextView.attributedText = NSAttributedString(attributedText)
        } catch {
            print("Markdown解析失败:\(error)")
        }
        
        // UITextView基础配置
        instructionsTextView.isEditable = false
        instructionsTextView.textContainer.lineBreakMode = .byWordWrapping
        instructionsTextView.textContainerInset = UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16)
    }
}

关键说明

  • 数学公式仅支持iOS 16.0+、iPadOS 16.0+版本
  • 如果需要兼容更低版本,得使用第三方Markdown渲染库(比如Down、MarkdownKit)
  • 块级数学公式需要用$$包裹,行内公式用$包裹,LaTeX语法遵循标准规则

内容的提问来源于stack exchange,提问作者Mitch Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:27:16