如何使NSTextView字符串中的字体调整为NSTextView大小

时间:2014-01-15 03:32:44

标签: objective-c cocoa nstextview

如何调整NSTextView的文本以适应框的内容而无需滚动?例如,如果用户键入一个长字符串,如果我稍后将该字符串显示为NSTextView,我该怎样才能使字体缩小到足够小的尺寸以适合该框?

1 个答案:

答案 0 :(得分:0)

this question中,接受的答案提供了一种测量NSTextView中文本高度的方法。 使用它,你可以循环通过不同的字体大小(即8-18)从最大到最小停止&选择符合NSTextView高度的第一个。

(完全未经测试)代码:

- (void)autoAdjustFontSizeForTextView:(NSTextView *)myView
{
    int minFont = 8;
    int maxFont = 18;

    for (int i=maxFont; i>=minFont; i--)
    {
      NSFont *myFont = [NSFont fontWithName:@"Lucida Grande" size:i];
        int textHeight = [self heightOfStringInTextView:myView withFont:myFont];
        if (textHeight < [myView frame].size.height)
        {
            // set view font
            [textView setFont:myFont];
            return;
        }
    }
}

- (int)heightOfStringInTextView:(NSTextView *)myView withFont:(NSFont *)myFont
{
    NSDictionary *attributes
      = [NSDictionary dictionaryWithObjectsAndKeys:
         myFont,NSFontAttributeName,nil];
    NSAttributedString *attributedString
      = [[NSAttributedString alloc] initWithString:
         [myView string] attributes:attributes];
    CGFloat height = [attributedString heightForWidth:
                     [myView frame].size.width];
    return (int)height;
}