在 Apple 的Apple Watch Design Resources中,有一个名为Alternate Font Weights and Italicizations的文档。在其中,它显示了默认字体的示例,其中应用了不同的属性,例如Italic、Emphasized和Short。
假设我想使用与“Short”示例完全相同的字体。
有没有办法通过故事板为标签选择这种字体和样式?
在代码中,我将如何设置标签以使用此字体和样式?
在 Apple 的Apple Watch Design Resources中,有一个名为Alternate Font Weights and Italicizations的文档。在其中,它显示了默认字体的示例,其中应用了不同的属性,例如Italic、Emphasized和Short。
假设我想使用与“Short”示例完全相同的字体。
有没有办法通过故事板为标签选择这种字体和样式?
在代码中,我将如何设置标签以使用此字体和样式?
在一个 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
,它会返回与 Body 样式相同的值。如果你用 尝试同样的事情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
正在指定,但在两个手表模拟器上都忽略了此特征。粗体和斜体工作得很好。size
设置为,它从[1]中0
获取其值。问题是在 38mm 设备上,和(在第 1 行使用)都存在错误。当用户不自定义字体大小时,两种方法都返回,在 38mm 设备上显然应该选择。(您可以通过在情节提要上放置一个标签,为其分配主体大小,并在视觉上将其与手动将其大小设置为 15 的标签进行比较来验证这一点。)UIFontDescriptorSizeAttribute
fontDescriptor
+[UIFontDescriptor preferredFontDescriptorWithTextStyle:]
-[UIFont preferredFontForTextStyle:]
16
15
注意:我正在运行 Xcode 6.2。