的NSTextField调整大小以适应内容
我的NSTextField与左,右和顶部约束定义(无底约束集)。如果内容不适合它,我需要增加NSTextField,如果还有未使用的空间,则需要减小大小。的NSTextField调整大小以适应内容
现在我有:用的NSTextField奇怪的行为会自动扩展,如果它具有多行文字或内容太多,也的NSTextField不会对窗口大小调整降低自己的规模。
我还没有发现写在斯威夫特来解决这个问题(我有很多这样的标签与约束),在iOS的一切都与普通的文本标签和制约工作的任何简单的解决办法。
我创建了这个问题简单的项目,你可以看到这个问题:[Download Text.zip]
我发现,但不能使用的解决方案:
-
你可以尝试计算可能的TextField高度并为其设置高度限制。该解决方案的问题:
- 可能的高度计算不准确,有时您计算不正确的高度。
- 解决方案使用一些复杂的代码写在Objective-C上。
在每个窗口上运行.sizeToFit()调整大小或文本更改操作。它不工作,因为.sizeToFit()总是将所有文本压缩到单行。
-
使用NSTextView代替的NSTextField。这是好方法,但:
- 我不需要滚动,编辑和NSTextView的其他功能。我不想打电话给简单标签的复杂组件。
- NSTextView总是要高度或底部的约束,我不知道底部约束,因为内容可以用新的文本向下展开。
- 我还没有找到完整的解决方案,使NSTextView的行为像我想:)
根据Mac OS X Release Notes(节的NSTextField intrinsicContentSize改进)它被称为时的NSTextField的高度改变的bug,但宽度保持不变。我们有两种方法来修复它:
- 我们可以指定
maximumNumberOfLines
为有意义的值。这对我们来说并不好,因为我们不知道实际的行数,也不想计算它。 - 我们可以设置
preferredMaxLayoutWidth
到一个真正的价值。我曾与这样的代码结束:
代码:
override func viewDidLayout() {
super.viewDidLayout()
textField.preferredMaxLayoutWidth = textField.frame.width
}
你能看看我的问题吗?我无法获得'preferredMaxLayoutWidth'的工作。 http://*.com/questions/37691202/nstextfield-preferredmaxlayoutwidth-not-working – fumoboy007
禁用第一个运行时布局的宽度和与此TextField玩。needsLayout = true textField.needsUpdateConstraints = true textField.needsDisplay = true。我不知道如何强制更新NSWindow实时调整大小的视图。所以一旦你调用addText,视图不会展开。但它会正确重绘窗口大小。 –
@ xhruso00,如果我禁用第一运行时布局NSTextField始终显示为1行。 needsLayout,needsUpdateConstraints,needsDisplay根本没有效果(在我的测试中)。 – Vasily
点击按钮后你调整了窗口大小吗?只有这样视图才会刷新。如果你解决了重绘问题,它会像你想要的那样运行,几乎没有代码。 –