【问题标题】:Modifying a multi-line NSTextField's font size according to content length根据内容长度修改多行 NSTextField 的字体大小
【发布时间】:2011-09-25 02:06:22
【问题描述】:

我有一个多行NSTextField,我需要设置它的字体大小,以便当它的内容很短时,它只显示在一个大字体大小的行上,
但是当它的内容较长时,它会分成两行并缩小其字体大小,以便内容保持在其范围内。

我查看了Get NSTextField contents to scale 中提供的解决方案,但它不适用于多行字段。

【问题讨论】:

  • 您也可以使用类似于此示例的系统常量:textField.font = [NSFont systemFontOfSize:[NSFont smallSystemFontSize]];

标签: objective-c cocoa macos multiline nstextfield


【解决方案1】:

对于 NSTextField 中的动态字体没有原生解决方案。你必须建立自己的算法。

编辑:

这可能不会太难。您可能只需要对其进行子类化,然后执行一个方法(在伪代码中):

if(text.length > someValue) 
    self.fontSize = 17 
else if (text.length < someValue)
    self.fontSize = 14
else
   self.fontSize = 12

如果有人知道第三方开源代码可以优雅地做到这一点,我们拭目以待

【讨论】:

  • 我害怕。但问题保持不变,只有谁知道我可以使用/能够修改以处理我的案例的好算法。
  • 嗯,你也许可以在 github 上找到一些东西,或者等待其他人在这里发布。但我想这不会那么难。请稍后在我的帖子中查看编辑。
【解决方案2】:

我使用这种方法来更改多行标签的字体大小。基本上,如果字符串的长度太长,则减小字体大小以使其适合标签区域。希望这会有所帮助。

if ([theText length] > 64) {
        [label setFont:[NSFont systemFontOfSize:10]];
    } else {
        [label setFont:[NSFont systemFontOfSize:13]];
    }

theText 是一个 NSString,label 是我希望向用户显示文本的多行标签。标签的尺寸是固定的。

【讨论】:

  • 感谢您的好主意,但我使用了一个循环,它会增加字体大小直到它不再适合 - 因为我需要它更具动态性,而不需要几个固定的值。
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 2016-11-25
  • 1970-01-01
  • 2011-05-13
  • 2021-06-27
  • 1970-01-01
  • 2014-07-24
  • 2015-08-28
相关资源
最近更新 更多