我有 NSTextField 定义了左、右和顶部约束 (没有底部约束集) 。如果内容无法容纳,我需要 NSTextField 增长,如果还有未使用的空间,我需要减小大小。

现在我有:如果 NSTextField 有多行文本或太多内容,它会自动以奇怪的行为扩展,而且 NSTextField 不会在窗口调整大小时减小自己的大小。

我还没有找到任何用 Swift 编写的简单解决方案来解决这个问题(我有很多这样的带有约束的标签),在 iOS 上,一切都在使用通常的文本标签和约束。

macos - NSTextField 可调整大小以适应内容-LMLPHP

我为这个问题创建了一个简单的项目,你可以看到这个问题:[Download Text.zip]

我找到但未使用的解决方案:

  • 您可以尝试计算可能的 TextField 高度并为其设置高度约束。该解决方案的问题:
  • 可能的高度计算不准确,有时您计算的高度不正确。
  • 解决方案是在 Objective-C 上用一些复杂的代码编写的。
  • 在每个窗口调整大小或文本更改操作上运行 .sizeToFit()。它不起作用,因为 .sizeToFit() 总是将所有文本压缩为单行。
  • 使用 NSTextView 而不是 NSTextField。这是个好方法,但是:
  • 我不需要 NSTextView 的滚动、编辑和其他功能。我不想为简单的标签调用复杂的组件。
  • NSTextView 总是想要高度或底部约束,我不知道底部约束,因为内容可以用新文本向下扩展。
  • 我还没有找到完整的解决方案来使 NSTextView 的行为像我想要的那样:)
  • 最佳答案

    根据 Mac OS X Release Notes(NSTextField 内在内容大小改进部分),当 NSTextField 的高度改变时,这是一个已知的错误,但宽度保持不变。我们有两种修复方法:

  • 我们可以将 maximumNumberOfLines 指定为一个有意义的值。这对我们来说不是一个好方法,因为我们不知道实际的行数,也不想计算它。
  • 我们可以将 preferredMaxLayoutWidth 设置为实际值。我以这样的代码结束:

  • 代码:
    override func viewDidLayout() {
        super.viewDidLayout()
        textField.preferredMaxLayoutWidth = textField.frame.width
    }
    

    关于macos - NSTextField 可调整大小以适应内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32846953/

    10-14 20:49