我想检测字体的样式(粗体、heavy、)。但我只能检测字体是否粗体。
BOOL isBold = (font.fontDescriptor.symbolicTraits & UIFontDescriptorTraitBold)!=0;UIFontDescriptorSymbolicTraits不存在黑或重性状。
一种方法是检查字体名是否包含“黑”或“重”字符串,但这似乎不可靠。
有UIFontWeightTrait,但这只是为了UIFont systemFontOfSize: weight:
如果有可用的样式,我想创建带有样式的自定义字体。
发布于 2017-05-15 08:08:07
检查它是Heavy还是Black
NSString *fontUsage = font.fontDescriptor.fontAttributes[@"NSCTFontUIUsageAttribute"];
if ([fontUsage isEqualToString:@"CTFontHeavyUsage"]) {
NSLog(@"It's Heavy");
}
else if ([fontUsage isEqualToString:@"CTFontBlackUsage"]) {
NSLog(@"It's Black");
}其他使用选项的列表非常简单,只需使用"CTFont......Usage“格式,我测试的列表如下:
//CTFontUltraLightUsage,CTFontThinUsage,CTFontLightUsage,CTFontMediumUsage,CTFontDemiUsage以及如何创建具有用法的字体,比如:
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] initWithFontAttributes:@{@"NSCTFontUIUsageAttribute":@"CTFontHeavyUsage"}];
UIFont *font = [UIFont fontWithDescriptor:fontDescriptor size:17];用于检查的Swift3版本:
if let fontUsage = font.fontDescriptor.fontAttributes["NSCTFontUIUsageAttribute"] as? String {
if fontUsage == "CTFontHeavyUsage" {
print("It's Heavy")
}
else if fontUsage == "CTFontBlackUsage" {
print("It's Black")
}
}发布于 2017-05-15 08:01:20
快速检测粗大/黑色字体的版本
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)发布于 2017-05-15 08:12:52
这将给出字体是否粗体:
var isBold = label.font.fontDescriptor.symbolicTraits.contains(.traitBold)下面是一些经验:这给出了正确的答案,即使设置了粗体字体,或者手动将字体的symbolicTraits设置为粗体:

https://stackoverflow.com/questions/43974080
复制相似问题