根据内容长度修改NSTextField的字体大小

时间:2011-06-29 11:36:05

标签: objective-c cocoa macos multiline nstextfield

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

编辑:

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

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

如果有人知道第三方开源代码以优雅地执行此操作,那就让我们等一下