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