将非单一字体的usesSingleLineMode设置为true会导致剪切文本的顶部。
我创建了3个非常简单的测试用例来说明这一点:
将以下内容添加到新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)
如果我在故事板中使用Interface Builder创建相同的bad
NSTextField,请在IB中设置字体并选中IB中的使用单行模式,它可以正常工作!但是,在IB中构建整体视图是不切实际的,因此我想以编程方式创建它。
为什么会这样?我是否错过了一些重要设置(我尝试调整许多NSTextField和NSTextFieldCell参数无效?是否有解决方法?
答案 0 :(得分:1)
根据Apple自己的说法,这是正确的,甚至是期望的行为:
Engineering已确定此问题的行为符合预期 关于以下信息:
根据NSCell的文档正确运行:
单线模式下的单元格使用固定基线布局。文本 无论如何,基线位置仅由控制尺寸决定 内容字体样式或大小。
来源:http://www.openradar.me/13813516
文档中说的内容确实正确,但这里的重要细节是文档没有说明的内容。它确实说" 文本基线位置仅由控件大小决定"但它没有详细解释如何做到这一点。并且已知的事实是,基线似乎总是正确地适合系统字体,但它几乎不适合您系统上的任何其他字体。问题在于,Apple会说" 固定基线布局",好像这就是众所周知的记录,但它不是。我还没有找到任何可以解释 固定基线布局的文档,甚至是遗留文档中的文档。
答案 1 :(得分:-1)
我有同样的问题,我通过设置解决了
usesSingleLineMode=false