NSTextField可调整大小以适应内容

问题描述 投票:3回答:1

我有NSTextField定义了左,右和上限制(没有底部约束集)。如果内容不适合,我需要NSTextField增长,如果剩余未使用的空间,我需要减小大小。

现在我有:如果NSTextField有多行文本或内容太多,它会自动扩展,但NSTextField也不会在窗口大小调整时减少自己的大小。

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

Illustration

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

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

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

根据Mac OS X Release Notes(NSTextField intrinsicContentSize改进部分),当NSTextField的高度发生变化时,已知错误,但宽度保持不变。我们有两种方法来修复它:

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

码:

override func viewDidLayout() {
    super.viewDidLayout()
    textField.preferredMaxLayoutWidth = textField.frame.width
}
© www.soinside.com 2019 - 2024. All rights reserved.