В проекте IOS, я попытался модифицировать шрифт тела (UIFontTextStyleBody
) включить UIFontDescriptorTraitTightLeading
. Когда я читаю свойства fontAttributes
, он сообщает NSFontNameAttribute
как .AppleSystemUIShortBody
(исходное значение .AppleSystemUIBody
).
Исходя из этого, я был в состоянии выяснить условия Apple:
+------------+-----------------------------------+------------------------------+---------------------------------+
| Term | UIFontDescriptorSymbolicTraits | NSFontNameAttribute | NSCTFontUIUsageAttribute |
+------------+-----------------------------------+------------------------------+---------------------------------+
| | (none) | .AppleSystemUIBody | UICTFontTextStyleBody |
| Italic | UIFontDescriptorTraitItalic | .AppleSystemUIItalicBody | UICTFontTextStyleItalicBody |
| Emphasized | UIFontDescriptorTraitBold | .AppleSystemUIEmphasizedBody | UICTFontTextStyleEmphasizedBody |
| Short | UIFontDescriptorTraitTightLeading | .AppleSystemUIShortBody | UICTFontTextStyleShortBody |
| Tall? | UIFontDescriptorTraitLooseLeading | .AppleSystemUISpliceTallBody | UICTFontTextStyleTallBody |
+------------+-----------------------------------+------------------------------+---------------------------------+
Если вы попытаетесь сделать то же самое с UIFontDescriptorTraitExpanded
, UIFontDescriptorTraitCondensed
, UIFontDescriptorTraitVertical
, UIFontDescriptorTraitUIOptimized
, а затем прочитать fontAttributes
, она возвращает то же самое как стиль тела. Если вы попробуете то же самое с UIFontDescriptorTraitMonoSpace
, он возвращает словарь nil
.
Таким образом, в проекте компании Apple Watch, вы должны быть в состоянии использовать Body Short Подчеркнуто шрифта так:
/*1*/ UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
/*2*/ fontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitTightLeading | UIFontDescriptorTraitBold];
/*3*/ UIFont *font = [UIFont fontWithDescriptor:fontDescriptor size:0];
/*4*/ [label setAttributedText:[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: font}]];
Я говорю «должны», потому что есть две ошибки в игре здесь :
- В строке 2 указывается
UIFontDescriptorTraitTightLeading
, но этот признак игнорируется на обоих симуляторах часов. Жирная и курсивная работа прекрасна.
- В строке 3, так как
size
установлен в 0
, он получает свое значение из UIFontDescriptorSizeAttribute
в fontDescriptor
[1]. Проблема в том, что на 38-мм устройстве имеется ошибка с +[UIFontDescriptor preferredFontDescriptorWithTextStyle:]
и -[UIFont preferredFontForTextStyle:]
(используется на линия 1). Когда пользователь doesn't customize the font size, оба метода возвращают 16
, когда ясно, что 15
должно быть выбрано на 38-мм устройстве. (Вы можете убедиться в этом, поставив метку на раскадровке, присвоив ему тела размера, и визуально сравнивая его с этикеткой, которая устанавливает его размер до 15 вручную.)
Примечания: Я бег Xcode 6.2 ,