我有同樣的問題。下面的示例代碼
#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);
}
你在視圖生命週期中調用了哪個點,並且使用了自動佈局? –
這是在一個圖層中。我在' - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx'中調用它,這是'NSView'上'drawRect:'層的等價層。我確實使用自動佈局來定位包含這些圖層的NSView。 –
你知道了嗎?你可以在一個更小的,孤立的應用程序(你可以分享)重現嗎?我懷疑這是AppKit中的一個錯誤。你可以通過緩存最初的寬高比來自行解決問題嗎? –