Eri*_*ner 5 macos cocoa appkit swift
我使用NSAttributedStringsdraw(in: rect)将一个字符串绘制到一个视图中(普通的也会出现同样的问题NSString)。现在结果似乎与我在 Xcode 中设置的部署目标不同。如果部署目标是10.13,则绘制调用会像这样呈现它
其中红色框代表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)
}
}
Run Code Online (Sandbox Code Playgroud)
现在在 10.13 和 10.14+ 部署目标之间切换,字符串位置将发生变化。如果您检查字符串,.size()它会68在 10.13 和5810.14+ 上返回。
我如何使平台之间保持一致?由于它在一个包内,DT 可能会有所不同,我想避免不同的代码路径。
此外,10.14+ 版本似乎更“正确”。
小智 2
我尝试更改字体,发现如果您使用默认系统字体,问题就会消失。这让我相信问题在于固定间距字体 \xe2\x80\x94 它似乎有不同的行高,具体取决于 DT。
\n通过段落样式设置特定的行高可以修复此问题:
\noverride func draw(_ dirtyRect: NSRect) {\n let paragraphStyle = NSMutableParagraphStyle()\n paragraphStyle.minimumLineHeight = 58\n paragraphStyle.maximumLineHeight = 58\n NSAttributedString(string: "9", attributes: [\n .font: NSFont.userFixedPitchFont(ofSize: 48)!,\n .foregroundColor: NSColor.labelColor,\n .paragraphStyle: paragraphStyle\n ]).draw(in: bounds)\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |