【问题标题】:Make NSTextField scrollable使 NSTextField 可滚动
【发布时间】:2016-04-25 09:56:34
【问题描述】:

我正在为 OSX 开发一个示例应用程序。我想要一个用户可以输入和编辑文本的文本区域。我希望文本区域随着字符数的增加而增长,并且我想让文本区域可滚动并在其增长超过一定长度后保持其高度固定。我为此目的使用 NSTextField。但我无法使其可滚动。为此,我还尝试在滚动视图中使用可滚动的 NSTextView。 NSTextField 不允许我通过界面生成器设置字体和字体大小。

【问题讨论】:

  • NSTextField 不应该是可滚动的(正如您所发现的)。它只适用于一条线。 NSTextView 是您要实现的目标的正确视图。你没有说什么 NSTextView 不适合你。您能否更具体一些 - 或者,发布一些代码,以便我们可以看到您在做什么?
  • @headbanger 基本上我希望 NSTextView 随着文本的增加而增长,但只到某个高度。之后我想滚动。我怎样才能做到这一点?无论如何我可以在运行时计算 NSTextView 所需的高度吗?

标签: macos cocoa appkit


【解决方案1】:

首先,正如您所确定的,您需要计算文本的高度。 Apple 在此处提供您需要的说明: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

然后您需要更改 NSTextView 的框架或约束(如果您使用自动布局)以将大小调整到预定义的最大值。

如果我是你,我会继承 NSTextView,然后重写 keyDown: 以便在文本更改时重新计算大小。是的,它可能不是最有效的解决方案——但你有多余的力量,这是一个很好的简单解决方案。

至于设置字体,您需要在 textstorage 上设置字体 - 而不是在视图上。这是怎么做的:

[textview.textStorage setFont:[NSFont fontWithName:@"Helvetica" size:12]];

如果这对您不起作用,您可以发布不起作用的代码吗?

【讨论】:

  • 是的,谢谢 :) 我会这样做的
  • 我无法更改 NSTextView 的字体
  • 我将使用委托并实现textDidChange:,而不是NSTextView 的子类。文本更改时,NSTextView 正在增长。您必须调整滚动视图的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2021-12-09
  • 2014-02-09
相关资源
最近更新 更多