【发布时间】:2020-10-06 20:51:10
【问题描述】:
我使用NSAttributedStrings draw(in: rect) 将字符串绘制到视图中(普通的NSString 也会出现同样的问题)。现在结果似乎与我在 Xcode 中设置的部署目标不同。如果部署目标是10.13,则draw call会这样渲染它
红色框代表rect。如果我将部署目标切换到10.14 或更高版本而不接触代码,则相同的绘制调用呈现如下
创建一个空项目,将NSWindows 内容视图类设置为TestView,并在下面创建类。
class TestView: NSView {
override func draw(_ dirtyRect: NSRect) {
NSAttributedString(string: "9", attributes: [
.font: NSFont.userFixedPitchFont(ofSize: 48)!,
.foregroundColor: NSColor.labelColor
]).draw(in: bounds)
}
}
现在在 10.13 和 10.14+ 部署目标之间切换,字符串位置将发生变化。如果您要检查字符串 .size(),它将在 10.13 上返回 68,在 10.14+ 上返回 58。
如何使平台之间保持一致?由于它在一个包中,DT 可能会有所不同,我想避免不同的代码路径。
此外,10.14+ 版本似乎更“正确”。
【问题讨论】:
-
我也遇到了同样的问题,最后是怎么解决的?
-
采用了一些次优的硬编码解决方案,但这并不重要,因为我只是将我的部署目标提高到 10.14。