如何在WKInterfaceLabel中使用替代字体重量(例如“short”)?

在苹果的Apple Watch Design Resources中 ,有一个名为Alternate Font Weights and Italicizations的文档。 其中显示了默认字体的样例,其中应用了斜体强调等不同的属性。

假设我想使用与“Short”示例完全相同的字体。

  1. 有什么办法通过故事板为标签select这种字体和风格?

  2. 在代码中,我将如何设置一个标签来使用这种字体和样式?

在iOS项目中,我尝试修改正文字体( UIFontTextStyleBody )以包含UIFontDescriptorTraitTightLeading 。 当我读取fontAttributes属性时,它NSFontNameAttribute .AppleSystemUIShortBody报告为.AppleSystemUIShortBody (原始值为.AppleSystemUIBody )。

由此,我能够弄清楚苹果的条款:

 +------------+-----------------------------------+------------------------------+---------------------------------+ | Term | UIFontDescriptorSymbolicTraits | NSFontNameAttribute | NSCTFontUIUsageAttribute | +------------+-----------------------------------+------------------------------+---------------------------------+ | | (none) | .AppleSystemUIBody | UICTFontTextStyleBody | | Italic | UIFontDescriptorTraitItalic | .AppleSystemUIItalicBody | UICTFontTextStyleItalicBody | | Emphasized | UIFontDescriptorTraitBold | .AppleSystemUIEmphasizedBody | UICTFontTextStyleEmphasizedBody | | Short | UIFontDescriptorTraitTightLeading | .AppleSystemUIShortBody | UICTFontTextStyleShortBody | | Tall? | UIFontDescriptorTraitLooseLeading | .AppleSystemUISpliceTallBody | UICTFontTextStyleTallBody | +------------+-----------------------------------+------------------------------+---------------------------------+ 

如果您尝试使用UIFontDescriptorTraitExpandedUIFontDescriptorTraitCondensedUIFontDescriptorTraitVerticalUIFontDescriptorTraitUIOptimized来做同样的事情,然后读取fontAttributes ,它会返回与Body风格相同的值。 如果使用UIFontDescriptorTraitMonoSpace尝试相同的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}]]; 

我说“应该”,因为这里有两个错误:

  • 在第二行, UIFontDescriptorTraitTightLeading被指定,但是这个特征在两个手表模拟器上都被忽略。 大胆和斜体的工作就好了。
  • 在第3行,因为size被设置为0 ,所以它从fontDescriptor [1]中的fontDescriptor获取它的值。 问题是,在一个38毫米的设备上,有一个错误+[UIFontDescriptor preferredFontDescriptorWithTextStyle:]-[UIFont preferredFontForTextStyle:] (用于第1行 )。 当用户不定制字体大小时 ,两种方法都会返回16 ,如果在38mm设备上应该select明显的15 。 (您可以通过在故事板上放置一个标签,将其分配给主体大小,并将其与手动将其大小设置为15的标签进行比较来validation。

注意:我正在运行Xcode 6.2。