UITextView 不显示来自 RTF 文件的格式化文本

UITextView not showing formatted text from RTF File

我正在为 iOS 9.1(使用 Xcode 7.1 和 Swift 2.0)制作一个应用程序,其中包含用于显示来自 rtf 资源的格式化文本的 UITextView文件。我在视图控制器的 viewDidLoad() 函数中调用以下函数来加载文本:

func loadTutorialText() {
    if let rtfPath = NSBundle.mainBundle().URLForResource("TutorialText", withExtension: "rtf") {
        do {
            let attributedStringWithRtf = try NSAttributedString(URL: rtfPath, options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], documentAttributes: nil)
            self.textView.attributedText = attributedStringWithRtf
        } catch {
            print("Error loading text")
        }
    }
}

当我 运行 应用程序时,加载了 rtf 资源文件中的文本,但所有内容都显示为纯文本。这是我正在使用的测试 rtf 文件的示例:

Example Heading

text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text.

Example Heading

text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text.

Bulleted List

  • Item 1
  • Item 2
  • Item 3

是否需要为 UITextView 设置一些属性才能正确显示?

不是将 documentAttributes 设置为 nil,而是将它们读入变量:

var d : NSDictionary? = nil
let attributedStringWithRtf = try NSAttributedString(
    URL: rtfPath, 
    options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], 
    documentAttributes: &d)

编辑 您的 RTF 文件在我的机器上工作正常:

从字面上看,该应用程序中唯一的代码是:

class ViewController: UIViewController {
    @IBOutlet weak var tv: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let rtfPath = NSBundle.mainBundle().URLForResource("TutorialText", withExtension: "rtf")!
        var d : NSDictionary? = nil
        let attributedStringWithRtf = try! NSAttributedString(
            URL: rtfPath,
            options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType],
            documentAttributes: &d)
        self.tv.attributedText = attributedStringWithRtf
    }
}

我不得不建议,如果这不是您所看到的,那么您有 其他 代码,您没有告诉我们这些代码正在出现并把事情搞砸了。

删除在界面生成器中添加到字体 属性 的不同大小 class 的所有字体大小设置,原因将被消除。

SWIFT 4

[NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType]

在 swift 4

时不适合我

这是我的解决方案:

let attributedStringWithRtf:NSAttributedString = try NSAttributedString(
                    url: rtfPath,
                    options: [.documentType: NSAttributedString.DocumentType.rtf],
                    documentAttributes: nil
                )
                self.textView.attributedText = attributedStringWithRtf