我收到客户要求在iOS 7项目中使用某种字体的请求,因为它有medieval numbers。
有没有办法为NSAttributedString激活这些数字?由于使用了默认的衬里编号,因此也包含在字体中。
这是一个例子。两条线都有相同的字体,没有变体(常规),一旦激活了中世纪数字,第二条就是默认的衬里数字。
答案 0 :(得分:11)
这些称为小写数字,可以使用UIFontDescriptor
打开。
首先,您需要为某些常量导入CoreText:
#import <CoreText/SFNTLayoutTypes.h>
or
@import CoreText.SFNTLayoutTypes;
然后使用字体描述符创建字体。在这里,我使用 Georgia 系列:
NSDictionary *lowercaseNumbers = @{
UIFontFeatureTypeIdentifierKey: @(kNumberCaseType),
UIFontFeatureSelectorIdentifierKey: @(kLowerCaseNumbersSelector),
};
UIFontDescriptor *descriptor = [[UIFontDescriptor alloc] initWithFontAttributes:
@{
UIFontDescriptorFamilyAttribute: @"Georgia",
UIFontDescriptorFeatureSettingsAttribute:@[ lowercaseNumbers ],
}];
UIFont *font = [UIFont fontWithDescriptor:descriptor size:15];
结果:
修改: @ Random832 指出, Georgia 只有小写数字,因此结果无关紧要。但是, @vikingosegundo 确认此代码适用于支持的字体。感谢。
顶行是用
生成的UIFont *font = [UIFont fontWithName:@"DIN Next LT Pro" size:12];
if (font)
label.font = font;
第二行
NSDictionary *lowercaseNumbers = @{ UIFontFeatureTypeIdentifierKey:@(kNumberCaseType), UIFontFeatureSelectorIdentifierKey: @(kLowerCaseNumbersSelector)};
UIFontDescriptor *descriptor = [[UIFontDescriptor alloc] initWithFontAttributes:
@{UIFontDescriptorFamilyAttribute: @"DIN Next LT Pro",UIFontDescriptorFeatureSettingsAttribute:@[ lowercaseNumbers ]}];
UIFont *font = [UIFont fontWithDescriptor:descriptor size:12];
if (font)
label.font = font;
答案 1 :(得分:2)
Another question指向正确的方向,但问题是提到表格数字[vs比例]而不是文字与衬里。
看起来您可以使用设置为kNumberCaseType
kLowerCaseNumbersSelector
的{{3}}来显示这样的数字。
CTFontDescriptorCreateCopyWithFeature和Here's another related question。