如何在WKInterfaceLabel中使用替代字体重量(例如“short”)?
在苹果的Apple Watch Design Resources中 ,有一个名为Alternate Font Weights and Italicizations的文档。 其中显示了默认字体的样例,其中应用了斜体 , 强调和短等不同的属性。
假设我想使用与“Short”示例完全相同的字体。
-
有什么办法通过故事板为标签select这种字体和风格?
-
在代码中,我将如何设置一个标签来使用这种字体和样式?
在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 | +------------+-----------------------------------+------------------------------+---------------------------------+
如果您尝试使用UIFontDescriptorTraitExpanded
, UIFontDescriptorTraitCondensed
, UIFontDescriptorTraitVertical
, UIFontDescriptorTraitUIOptimized
来做同样的事情,然后读取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。