寻找基本上无论是[UILabel adjustsFontSizeToFitWidth]
的可可等价物。如何让NSTextField自动调整字体大小以适应文本?
9
A
回答
1
我用Jerry Krinock的优秀NS(Attributed)String + Geometrics (located here)和一个像下面这样的小方法。我仍然对更简单的方式感兴趣。
- (void) prepTextField:(NSTextField *)field withString:(NSString *)string
{
#define kMaxFontSize 32.0f
#define kMinFontSize 6.0f
float fontSize = kMaxFontSize;
while (([string widthForHeight:[field frame].size.height font:[NSFont systemFontOfSize:fontSize]] > [field frame].size.width) && (fontSize > kMinFontSize))
{
fontSize--;
}
[field setFont:[NSFont systemFontOfSize:fontSize]];
[field setStringValue:string];
[self addSubview:field];
}
2
不要忘记看超类。 NSTextField是一种NSControl,每个NSControl都响应the sizeToFit
message。
6
我已经通过创建覆盖字符串绘图的NSTextFieldCell子类来解决它。它看起来该字符串是否合适,如果不合适,它会减小字体大小直到它合适。这可能会变得更加高效,我不知道cellFrame
的宽度为0时它的表现如何。尽管如此,它还是符合我的需求的Good Enough™。
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSAttributedString *attributedString;
NSMutableAttributedString *mutableAttributedString;
NSSize stringSize;
NSRect drawRect;
attributedString = [self attributedStringValue];
stringSize = [attributedString size];
if (stringSize.width <= cellFrame.size.width) {
// String is already small enough. Skip sizing.
goto drawString;
}
mutableAttributedString = [attributedString mutableCopy];
while (stringSize.width > cellFrame.size.width) {
NSFont *font;
font = [mutableAttributedString
attribute:NSFontAttributeName
atIndex:0
effectiveRange:NULL
];
font = [NSFont
fontWithName:[font fontName]
size:[[[font fontDescriptor] objectForKey:NSFontSizeAttribute] floatValue] - 0.5
];
[mutableAttributedString
addAttribute:NSFontAttributeName
value:font
range:NSMakeRange(0, [mutableAttributedString length])
];
stringSize = [mutableAttributedString size];
}
attributedString = [mutableAttributedString autorelease];
drawString:
drawRect = cellFrame;
drawRect.size.height = stringSize.height;
drawRect.origin.y += (cellFrame.size.height - stringSize.height)/2;
[attributedString drawInRect:drawRect];
}
+0
为了正确地使字体垂直居中,紧接在'while'之前需要以下行:[mutableAttributedString removeAttribute:@“NSOriginalFont”range:NSMakeRange(0,[mutableAttributedString length])];' – DarkDust 2014-03-04 10:11:33
相关问题
- 1. 自动调整字体大小以适应容器
- 2. 如何调整NSTextField的大小以适应它所保存的文本?
- 3. 更改NSTextField字体大小以适合
- 4. wxPython的textctrl自动调整大小以适应文本
- 5. 自动调整字体大小以适合矩形
- 6. 如何调整标签的字体大小以适应矩形?
- 7. 编程调整字体大小以适应Word中文本框内的文本
- 8. Android:调整EditText字体大小以适合文本到一行
- 9. 如何自动调整图像大小以适应div容器
- 10. 动态文本 - 字体自动调整大小
- 11. 您如何让Silverlight调整文本内容的大小以适应?
- 12. 自动调整文字大小以适合按钮的宽度
- 13. 自动调整UILabel字体大小
- 14. 自动调整字体大小
- 15. 自动调整文本框中的字体大小
- 16. MD-按钮调整字体大小以适合按钮大小
- 17. 字体大小自动调整为适合
- 18. C#调整大小的字体,以适应容器
- 19. 调整文本框的字体大小
- 20. Android - 使textview自动调整大小的文本,以适应布局
- 21. 如何自动调整字体大小以适合文本框的高度/宽度?
- 22. iTextSharp:如何调整图像大小以适应修正大小?
- 23. 自动调整图层的大小以适应画布 - Photoshop
- 24. HTML行自动调整大小以适应窗口
- 25. 自动调整NSTabView的大小以适应内容视图
- 26. 长文本自动调整列大小
- 27. 自动调整文本框的大小
- 28. 是否可以调整文本大小以适应固定大小的div?
- 29. 调整窗口大小以适应文档大小
- 30. 调整字体大小以适合,Paint.measureText返回太小的值
我为别人回答了这个问题。你可以看到我的答案[这里](http://stackoverflow.com/questions/2908704/get-nstextfield-contents-to-scale/2911982#2911982)。 – regulus6633 2010-07-24 20:06:20