Как да използвам алтернативно тегло на шрифта (напр. кратко) в WKInterfaceLabel?

В Ресурсите за дизайн на Apple Watch на Apple има документ, наречен Алтернативно тегло на шрифта и курсив. В него той показва примери за това как изглежда шрифтът по подразбиране с различни атрибути като курсив, подчертан и кратък, приложени към него.

Да приемем, че искам да използвам шрифт, който изглежда точно като примера „Кратък“.

  1. Има ли някакъв начин да изберете този шрифт и стил чрез сценария за етикет?

  2. В кода как бих задал етикет, който да използва този шрифт и стил?


person Senseful    schedule 03.04.2015    source източник


Отговори (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 Emphasized така:

/*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 mm устройство има грешка както с +[UIFontDescriptor preferredFontDescriptorWithTextStyle:], така и с -[UIFont preferredFontForTextStyle:] (използван на ред 1). Когато потребителят не персонализира размера на шрифта, и двата метода връщат 16, когато ясно 15 трябва да бъде избрано на 38 mm устройство . (Можете да проверите това, като поставите етикет върху разкадровка, зададете му размер Тяло и визуално го сравните с етикет, който задава размера му на 15 ръчно.)

Забележка: Работя с Xcode 6.2.

person Senseful    schedule 08.04.2015