2015-04-03 4 views
1

В Apple Apple Watch Design Resources есть документ под названием Альтернативные веса шрифтов и курсивы. В нем показаны примеры того, как выглядит шрифт по умолчанию с различными атрибутами, такими как Italic, Подчеркнуто и Короткие к нему применены.Как использовать лишние шрифты шрифта (например, «короткие») в WKInterfaceLabel?

Предположим, я хочу использовать шрифт, который выглядит точно так же, как пример «Короткий».

  1. Есть ли способ выбрать этот шрифт и стиль через раскадровку для ярлыка?

  2. В коде, как бы установить ярлык для использования этого шрифта и стиля?

ответ

1

В проекте 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 ,