iOS - 如何检测字体是粗体/黑色/重磅......?

时间:2017-05-15 07:52:40

标签: ios uifont

我想检测字体的样式(粗体黑色)。但我可以检测字体是否粗体。

BOOL isBold = (font.fontDescriptor.symbolicTraits & UIFontDescriptorTraitBold)!=0;

UIFontDescriptorSymbolicTraits中没有黑色或重型特征。

一种方法是检查字体名称是否包含'black'或'heavy'字符串,但这似乎不可靠。

UIFontWeightTrait,但仅适用于UIFont systemFontOfSize: weight:

如果有可用的样式,我想用样式创建自定义字体。

3 个答案:

答案 0 :(得分:3)

检查它是还是黑色

hibernate.cache.keys_factory=default

其他使用选项的列表非常简单,只需将使用格式化为" CTFont ......用法",我测试的列表是:

NSString *fontUsage = font.fontDescriptor.fontAttributes[@"NSCTFontUIUsageAttribute"];
if ([fontUsage isEqualToString:@"CTFontHeavyUsage"]) {
    NSLog(@"It's Heavy");
}
else if ([fontUsage isEqualToString:@"CTFontBlackUsage"]) {
    NSLog(@"It's Black");
}

以及如何创建使用的字体,如重:

//CTFontUltraLightUsage,CTFontThinUsage,CTFontLightUsage,CTFontMediumUsage,CTFontDemiUsage
用于检查的

Swift3 版本:

UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] initWithFontAttributes:@{@"NSCTFontUIUsageAttribute":@"CTFontHeavyUsage"}];
UIFont *font = [UIFont fontWithDescriptor:fontDescriptor size:17];

答案 1 :(得分:1)

用于检测重/黑色字体的Swift版本

let fontUsage = font.fontDescriptor.fontAttributes["NSCTFontUIUsageAttribute"] as! String
if fontUsage == "CTFontHeavyUsage"{
    print("It is heavy")
}
else if fontUsage == "CTFontBlackUsage"{
    print("it's black")
}

并创建包含属性的字体:

let fontDescriptor = UIFontDescriptor(fontAttributes: ["NSCTFontUIUsageAttribute" : "CTFontHeavyUsage"])
let font = UIFont(descriptor: fontDescriptor, size: 17)

答案 2 :(得分:0)

这将为您提供字体是否为粗体:

var isBold = label.font.fontDescriptor.symbolicTraits.contains(.traitBold)

以下是一些体验:即使设置了粗体字体,或者手动将字体的symbolicTraits设置为粗体,这也会给出正确的答案:

enter image description here