gpt4 book ai didi

swift - NSTextField 非系统字体内容在 usesSingleLineMode 为真时被剪裁

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:47 26 4
gpt4 key购买 nike

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

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

  • good:非系统字体,usesSingleLineMode = false。工作正常。
  • 不好:非系统字体,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)

See the result

如果我在 Storyboard中使用 Interface Builder 创建相同的 bad NSTextField,请在 IB 中设置字体并选中 Uses Single Line Mode in IB 它工作正常!但是,在 IB 中构建整体 View 是不切实际的,因此我想以编程方式创建它。

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

最佳答案

根据 Apple 自己的说法,这是正确的,甚至是理想的行为:

Engineering has determined that this issue behaves as intended based on the following information:

This behaves correctly according to the documentation for NSCell:

Cells in the single line mode use the fixed baseline layout. The text baseline position is determined solely by the control size regardless of content font style or size.

来源:http://www.openradar.me/13813516

文档所说的确实是正确的,但这里的重要细节是文档没有说的。它确实说“文本基线位置仅由控件大小决定”,但没有详细解释这是如何完成的。众所周知,基线似乎总是适合系统字体,但它几乎不适合您系统上的任何其他字体。问题是 Apple 谈到“固定基线布局”,就好像这是众所周知的并且有据可查的东西,但事实并非如此吨。我还没有找到任何文档来解释 固定基线布局,即使是遗留文档也是如此。

关于swift - NSTextField 非系统字体内容在 usesSingleLineMode 为真时被剪裁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com