Я работаю над Mac-приложением, которое позволяет пользователю значительно приближать контент. Мне нужно измерить размер текста, который я делаю. Когда я масштабирую шрифт для увеличения, размер точки шрифта очень мал (т. Е. 0,001). Когда я использую [NSString sizeWithAttributes:]
, чтобы получить размер строки, я получаю правильную ширину, и я всегда получаю 1.0 для высоты. У меня также есть приложение iOS, и этот класс рендеринга используется как на iOS, так и на Mac. На iOS, когда я использую UIFont
с размером точки .001, я получаю правильную высоту, когда звоню sizeWithAttributes
.sizeWithAttributes дает неправильную высоту с NSFont на маке, когда размер точки очень мал
2
A
ответ
1
У меня такая же проблема. Следующий пример код
#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));
доходность по прошивке 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);
}
Смежные вопросы
- 1. Размер шрифта очень мал на мобильных устройствах
- 2. Safari дает неправильную высоту() свойство
- 3. sizeWithAttributes() не дает мне правильную высоту после нескольких строк разрыва
- 4. iOS Chrome дает неправильную высоту окна
- 5. CircularGauge отображается incorectly - его размер очень мал
- 6. sizewithattributes не возвращает правильный размер
- 7. iPad2 дает только неправильную ширину и высоту?
- 8. sizewithAttributes не возвращает правильную высоту для uilabels
- 9. NSString sizeWithAttributes: Неточность
- 10. Точный размер CGRect с использованием CGSize ... sizeWithAttributes
- 11. Имя и размер от NSFont
- 12. FontMetrics возвращает неправильную высоту
- 13. Размер шрифта слишком мал, когда drawstring называется
- 14. Application Loader дает неправильную ошибку
- 15. jQuery возвращает неправильную высоту документа
- 16. iPad в ландшафте дает неправильную ширину и высоту
- 17. В C#/.NET метод Graphics.MeasureString дает неправильную высоту
- 18. NSAttributedString многострочный, дающий неправильную высоту?
- 19. Преобразование размера шрифта SVG в размер NSFont
- 20. NSNumberFormatter дает неправильную валюту
- 21. dateFromComponents дает неправильную дату
- 22. Размер массива «превышен», но массив мал
- 23. С пограничным полем ввода текста с заданной высотой, заполнением и границей, инспектор дает неправильную высоту?
- 24. Размер шрифта слишком мал, на меньших разрешениях
- 25. cv2.polylines дает неправильную форму
- 26. iOS 7 Frame возвращает неправильную высоту
- 27. Webapp на iphone 5 показывает неправильную высоту
- 28. Какао: NSUInteger vs unsigned int Когда диапазон очень мал?
- 29. UIViewcontroller дает неправильную ориентацию
- 30. jQuery возвращает неправильную высоту элемента
В какой момент вы называете это в жизненном цикле просмотра и используете ли вы автоматическую компоновку? –
Это слой. Я называю это в слое '- (void) drawLayer: (CALayer *) inContext: (CGContextRef) ctx', который является эквивалентом уровня' drawRect: 'на' NSView'. Я использую auto-layout для размещения NSView, который содержит эти слои. –
Вы уже поняли это? Можете ли вы воспроизвести это в небольшом изолированном приложении (которое вы могли бы поделиться)? Я подозреваю, что это ошибка в AppKit. Можете ли вы работать, возможно, кэшируя начальное соотношение ширины и высоты и определяя высоту самостоятельно? –