当usesSingleLineMode为true时,NSTextField非系统字体内容被剪裁

dro*_*ang 7 macos cocoa nstextfield swift

对于非系统字体,将usesSingleLineMode设置为true会导致文本的顶部被剪裁.

我创建了3个非常简单的测试用例来说明这一点:

  • good:非系统字体,其中usesSingleLineMode = false.工作良好.
  • bad:使用usesSingleLineMode = true的非系统字体.不行.
  • system:使用usesSingleLineMode = true的系统字体.工作良好.

将以下内容添加到新Cocoa OSX应用程序的viewDidLoad()方法中:

// Do any additional setup after loading the view.
let good = NSTextField(frame: NSRect(x: 0, y: 0, width: 800, height: 55))
good.usesSingleLineMode = false
good.font = NSFont(name: "HelveticaNeue-UltraLight", size: 24)
good.stringValue = "Good usesSingleLineMode false "
self.view.addSubview(good)

let bad = NSTextField(frame: NSRect(x: 0, y: 100, width: 800, height: 55))
bad.usesSingleLineMode = true
bad.font = NSFont(name: "HelveticaNeue-UltraLight", size: 24)
bad.stringValue = "Bad usesSingleLineMode true"
self.view.addSubview(bad)

let system = NSTextField(frame: NSRect(x: 0, y: 200, width: 800, height: 55))
system.usesSingleLineMode = true
system.font = NSFont.systemFontOfSize(24)
system.stringValue = "Good usesSingleLineMode true, System Font"
self.view.addSubview(system)
Run Code Online (Sandbox Code Playgroud)

看到结果

如果我bad在故事板中使用Interface Builder 创建相同的NSTextField,请在IB中设置字体并选中IB中的使用单行模式,它可以正常工作!但是,在IB中构建整体视图是不切实际的,因此我想以编程方式创建它.

为什么会这样?我是否错过了一些重要设置(我尝试调整许多NSTextField和NSTextFieldCell参数无效?有解决方法吗?

小智 -1

usesSingleLineMode我通过设置为 解决了这个问题false