的NSTextField调整大小以适应内容

问题描述:

我的NSTextField与左,右和顶部约束定义(无底约束集)。如果内容不适合它,我需要增加NSTextField,如果还有未使用的空间,则需要减小大小。的NSTextField调整大小以适应内容

现在我有:用的NSTextField奇怪的行为会自动扩展,如果它具有多行文字或内容太多,也的NSTextField不会对窗口大小调整降低自己的规模。

我还没有发现写在斯威夫特来解决这个问题(我有很多这样的标签与约束),在iOS的一切都与普通的文本标签和制约工作的任何简单的解决办法。

Illustration

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

我发现,但不能使用的解决方案:

  1. 你可以尝试计算可能的TextField高度并为其设置高度限制。该解决方案的问题:

    • 可能的高度计算不准确,有时您计算不正确的高度。
    • 解决方案使用一些复杂的代码写在Objective-C上。
  2. 在每个窗口上运行.sizeToFit()调整大小或文本更改操作。它不工作,因为.sizeToFit()总是将所有文本压缩到单行。

  3. 使用NSTextView代替的NSTextField。这是好方法,但:

    • 我不需要滚动,编辑和NSTextView的其他功能。我不想打电话给简单标签的复杂组件。
    • NSTextView总是要高度或底部的约束,我不知道底部约束,因为内容可以用新的文本向下展开。
    • 我还没有找到完整的解决方案,使NSTextView的行为像我想:)
+0

禁用第一个运行时布局的宽度和与此TextField玩。needsLayout = true textField.needsUpdateConstraints = true textField.needsDisplay = true。我不知道如何强制更新NSWindow实时调整大小的视图。所以一旦你调用addText,视图不会展开。但它会正确重绘窗口大小。 –

+0

@ xhruso00,如果我禁用第一运行时布局NSTextField始终显示为1行。 needsLayout,needsUpdateConstraints,needsDisplay根本没有效果(在我的测试中)。 – Vasily

+0

点击按钮后你调整了窗口大小吗?只有这样视图才会刷新。如果你解决了重绘问题,它会像你想要的那样运行,几乎没有代码。 –

根据Mac OS X Release Notes(节的NSTextField intrinsicContentSize改进)它被称为时的NSTextField的高度改变的bug,但宽度保持不变。我们有两种方法来修复它:

  1. 我们可以指定maximumNumberOfLines为有意义的值。这对我们来说并不好,因为我们不知道实际的行数,也不想计算它。
  2. 我们可以设置preferredMaxLayoutWidth到一个真正的价值。我曾与这样的代码结束:

代码:

override func viewDidLayout() { 
    super.viewDidLayout() 
    textField.preferredMaxLayoutWidth = textField.frame.width 
} 
+0

你能看看我的问题吗?我无法获得'preferredMaxLayoutWidth'的工作。 http://*.com/questions/37691202/nstextfield-preferredmaxlayoutwidth-not-working – fumoboy007