swift 如何修复macOS索诺马上NSTextView中的HTML布局问题?

eivnm1vs  于 11个月前  发布在  Swift
关注(0)|答案(1)|浏览(122)

在macOS索诺马(23 A5312 d)上,在NSTextView中使用NSAttributedString时存在HTML表格布局问题。
考虑以下Swift代码:

override func viewDidLoad() {
        super.viewDidLoad()

        let html = """
<table width="100%" border="1" style="color: white">
  <tr>
    <td align="left">Left</td>
    <td align="right">Right</td>
  </tr>
</table>
"""
        let data = Data(html.utf8)
        let definition = try! NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: NSNumber(value: String.Encoding.utf8.rawValue)], documentAttributes: nil)
        let frameRect = NSRect(x: 100, y: 0, width: 300, height: 200)
        let textView = NSTextView(frame: frameRect)
        textView.textStorage?.setAttributedString(definition)
        textView.backgroundColor = .clear

        view.addSubview(textView)
    }

字符串
在macOS Ventura上,它看起来像这样:
x1c 0d1x的数据
在macOS索诺马上,它看起来像这样:



当鼠标移到上面时,HTML(尽管是破碎的)出现:



这是报告给苹果FB 12800496,他们回应概述,这是由于“降级到TextKit 1处理表内容”.他们建议使用“TextKit 1 NSTextView通过init(usingTextLayoutManager:)",以下代码解决了HTML最初不出现的问题:

let textView = NSTextView(usingTextLayoutManager: false)
textView.frame = frameRect


Apple反馈写道,布局问题来自“WebKit的NSAttributedString翻译”,并且“TextKit的内部WebKit 1翻译器”已妥善处理。
是否可以调用“WebKit 1翻译器”?

更新2023-11-01

按照Apple的What's new in TextKit and text views开发者视频中的“以编程方式退出”指令强制TextKit 1导致了不同的布局问题:

deyfvvtc

deyfvvtc1#

似乎只有Apple可以解决这个问题,macOS 14.2(23C64)修复了一些TextKit问题,但这个例子现在看起来像这样:


的数据

相关问题