【问题标题】:How can I get an NSTextField to behave like a HTML text?如何让 NSTextField 表现得像 HTML 文本?
【发布时间】:2011-02-22 08:09:43
【问题描述】:

我有一些静态文本,通常只有 1 行长,显示在我的 xib 的 NSTextField 中。在某些情况下,文本足够长以保证 2 行,我只希望标签垂直调整大小以适应它,而不给我滚动条或其他任何东西。想想网页上的文字是如何表现的……这就是我想要的。我只是希望标签随着不同的文本而缩小,并调整其宽度。我怎样才能做到这一点?



更新
以下是它当前行为的视频:http://screencast.com/t/4JYTv7jVG3O

注意当NSTextField 有两行长时,文本下方有一个很大的间隙。这是因为星星和按钮在框架的底部对齐,并且因为我必须让框架更高才能容纳 2 行,所以它们会留在那里。如果我能得到这个问题的答案,我会让 1 行文本的框架更短,并使底部的文本字段(文本更小)更高以进行补偿。这种浮动布局可以做吗?

【问题讨论】:

  • 你不能让文本字段的背景透明,将字段设置为两行,然后使文本字段高两行吗?我认为文本只会在到达字段边缘时换行......不过,如果它的行为像 HTML 那样会非常有趣......
  • 是的,但是我在它下面有视图,我与文本字段的底部边缘对齐。如果我按照您的建议进行操作,则在 1 行情况下,我会在文本和下部元素之间留有空格,而在 2 行情况下则没有空格。我正在尝试呈现统一的视觉体验

标签: cocoa text resize nstextfield autoresize


【解决方案1】:

一种选择是实际使用WebView 来显示您的内容。然后,您将获得您所期望的行为,但需要花费一些工作来管理与控件的交互。

您需要使用[webView setDrawsBackground:NO]WebView 设置为不显示背景。

您还需要使用 HTML/CSS 构建内容(包括星级和按钮),然后在按下按钮时使用 Objective-C/JavaScript 桥来回调您的应用。

更多关于从 JavaScript 调用 Objective-C 的信息是here

您也可以使用NSTextView 并将按钮和星级评分嵌入NSTextAttachment 对象,但这非常复杂,使用WebView 会容易得多。

我能看到的唯一其他选择是编写一个视图控制器,它根据容器视图的当前大小来管理控件的布局。为此,您需要测量文本,其中一种方法是使用 Jerry Krinock 编写的出色的 NS(Attributed)String+Geometrics 类别。

【讨论】:

  • 我已经用其他几个选项更新了答案,但不幸的是,我认为没有一个“简单”的答案。
猜你喜欢
  • 2018-12-25
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 2012-02-14
  • 2017-10-19
  • 2018-02-10
相关资源
最近更新 更多