UIFont:如何使用样式替代字符?

问题描述 投票:0回答:1

在我的应用程序中,我想将stylistic alternate font用作'a',而不是system font

附加screenshot,它解释了字体的不同呈现方式。

enter image description here

如何为UILabelUITextView启用此行为,以便呈现正确的一层'a'?

我确实找到了YouTube video link可以准确解释这一点,但他使用的是custom font,并且已硬编码。我只想使用system font,但要使用此备用字符。

我也许可以用UILabelcustom character进行硬编码,我不确定,因为我想使用System font。我不想使用custom Font。可以编辑的UITextView呢?当用户键入内容时,我们如何使其使用备用a

ios swift uifont typography
1个回答
1
投票

这是一种字体功能,称为“其他样式集”,您可以使用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的任何地方使用它。

© www.soinside.com 2019 - 2024. All rights reserved.