在我的应用程序中,我想将stylistic alternate font
用作'a',而不是system font
。
附加screenshot
,它解释了字体的不同呈现方式。
如何为UILabel
和UITextView
启用此行为,以便呈现正确的一层'a'?
我确实找到了YouTube video
link可以准确解释这一点,但他使用的是custom font
,并且已硬编码。我只想使用system font
,但要使用此备用字符。
我也许可以用UILabel
对custom character
进行硬编码,我不确定,因为我想使用System font
。我不想使用custom Font
。可以编辑的UITextView
呢?当用户键入内容时,我们如何使其使用备用a
?
这是一种字体功能,称为“其他样式集”,您可以使用CoreText配置它。请记住,并非所有字体都具有此选项,但是系统字体却具有。但是,您需要找出所需的备用集。
首先,创建您感兴趣的字体:
import CoreText
import UIKit
let baseFont = UIFont.systemFont(ofSize: 72)
然后打印出其功能:
print(CTFontCopyFeatures(baseFont)!)
找到有关替代文体集的部分,尤其是想要的集,“一层:”
{
CTFeatureTypeIdentifier = 35;
CTFeatureTypeName = "Alternative Stylistic Sets";
CTFeatureTypeSelectors = (
{
CTFeatureSelectorIdentifier = 2;
CTFeatureSelectorName = "Straight-sided six and nine";
},
{
CTFeatureSelectorIdentifier = 4;
CTFeatureSelectorName = "Open four";
},
{
CTFeatureSelectorIdentifier = 6;
CTFeatureSelectorName = "Vertically centered colon";
},
{
CTFeatureSelectorIdentifier = 10;
CTFeatureSelectorName = "Vertically compact forms";
},
{
CTFeatureSelectorIdentifier = 12;
CTFeatureSelectorName = "High legibility";
},
{
CTFeatureSelectorIdentifier = 14;
CTFeatureSelectorName = "One storey a";
},
...
重要的数字是选择器(CTFeatureSelectorIdentifier),14。由此您可以创建新的字体描述符和新字体:
let descriptor = CTFontDescriptorCreateCopyWithFeature(
baseFont.fontDescriptor,
kStylisticAlternativesType as CFNumber,
14 as CFNumber)
或者如果更方便,也可以直接在UIKit中执行此操作:
let settings: [UIFontDescriptor.FeatureKey: Int] = [
.featureIdentifier: kStylisticAlternativesType,
.typeIdentifier: 14
]
let descriptor = baseFont.fontDescriptor.addingAttributes([.featureSettings: [settings]])
((有些令人惊讶的事实是.featureIdentifier
是“ CTFeature Type Identifier”,.typeIdentifier
是“ CTFeature Selector Identifier”。]
然后您可以创建一个新字体(大小为零意味着将大小保持不变):
let font = UIFont(descriptor: descriptor, size: 0)
您可以在接受UIFont的任何地方使用它。