【发布时间】:2014-01-15 03:32:44
【问题描述】:
如何在无需滚动的情况下调整 NSTextView 的文本以适应框的内容?例如,如果用户输入了一个长字符串,如果我稍后将该字符串显示为 NSTextView,我怎样才能使字体减小到足够小的大小以适应框?
【问题讨论】:
标签: objective-c cocoa nstextview
如何在无需滚动的情况下调整 NSTextView 的文本以适应框的内容?例如,如果用户输入了一个长字符串,如果我稍后将该字符串显示为 NSTextView,我怎样才能使字体减小到足够小的大小以适应框?
【问题讨论】:
标签: objective-c cocoa nstextview
在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;
}
【讨论】: