我正在开发一个 Mac 应用程序,它可以让用户放大内容。我需要测量我渲染的文本的大小。当我缩放字体以进行缩放时,字体的磅值非常小(即 0.001)。当我[NSString sizeWithAttributes:]
用来获取字符串的大小时,我得到了正确的宽度,而高度总是得到 1.0。我还有一个 iOS 应用程序,这个渲染类在 iOS 和 Mac 上都使用。在 iOS 上,当我使用UIFont
点大小为 0.001 的 a 时,我调用sizeWithAttributes
.
问问题
395 次
1 回答
2
我有同样的问题。以下示例代码
#if TARGET_OS_IOS == 0
#define UIFont NSFont
#define NSStringFromCGSize NSStringFromSize
#endif
UIFont *uiFont = [UIFont fontWithName:@"Courier" size:19];
CGSize boxSize = [@"1" sizeWithAttributes:@{NSFontAttributeName:uiFont}];
NSLog(@"boxSize %@", NSStringFromCGSize(boxSize));
在 iOS 上产生boxSize {11.40185546875, 19}
,在 macOS 上产生boxSize {11.40185546875, 24}
。
我的解决方法:使用 CTFont。
CTFontRef _contentFont = CTFontCreateWithName((__bridge CFStringRef)@"Courier", 19, NULL);
CGGlyph glyphs[1];
UniChar chars[1];
chars[0] = '1';
bool rc = CTFontGetGlyphsForCharacters(_contentFont, chars, glyphs, 1);
if (rc) {
double advance = CTFontGetAdvancesForGlyphs(_contentFont, kCTFontOrientationDefault, glyphs, NULL, 1);
boxSize.width = advance;
boxSize.height = CTFontGetAscent(_contentFont) + CTFontGetDescent(_contentFont);
}
于 2017-05-08T11:47:02.760 回答