如何使用小型Caps?

How to use small Caps?

我正在尝试使用具有小型大写字母的字体。我在某个人的网站上发现了一个 UIFont 扩展,声称它可以处理小型大写字母,但可惜,没有运气。有什么想法吗?

extension UIFont {

  func smallCapsFontVariant(smallCapsForUppercase: Bool = true) -> UIFont {
  var features = [
  [UIFontFeatureTypeIdentifierKey: kLowerCaseType,
    UIFontFeatureSelectorIdentifierKey: kLowerCaseSmallCapsSelector]
]

if smallCapsForUppercase {
  features.append([UIFontFeatureTypeIdentifierKey: kUpperCaseType,
    UIFontFeatureSelectorIdentifierKey: kUpperCaseSmallCapsSelector])
}

let smallCapsFontDescriptor = fontDescriptor().fontDescriptorByAddingAttributes([
  UIFontDescriptorFeatureSettingsAttribute : features
  ])

return UIFont(descriptor: smallCapsFontDescriptor, size: 0d)
}

问题是很少有字体 具有 小型大写字母变体。如果您不使用这少数几个之一,您将不会获得小型大写字母。您无法神奇地创建不存在的功能...

这是访问 Didot 的小型大写变体的代码:

    let desc = UIFontDescriptor(name:"Didot", size:18)
    let d = [
        UIFontFeatureTypeIdentifierKey:kLetterCaseType,
        UIFontFeatureSelectorIdentifierKey:kSmallCapsSelector
    ]
    let desc2 = desc.fontDescriptorByAddingAttributes(
        [UIFontDescriptorFeatureSettingsAttribute:[d]]
    )
    let f = UIFont(descriptor: desc2, size: 0)

现在 f 是 Didot 的小型大写变体,您可以在您的界面中使用它。

如果您使用的字体不是 Didot,请将其替换为该代码;但一定要确保你的字体有一个小的大写变体,否则这将不起作用。