在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导致了不同的布局问题:
1条答案
按热度按时间deyfvvtc1#
似乎只有Apple可以解决这个问题,macOS 14.2(23C64)修复了一些TextKit问题,但这个例子现在看起来像这样:
的数据