给定以下代码和运行iOS 7.1或更高版本的设备:
NSDictionary *fontTraitsDictionary = @{UIFontWeightTrait : @(-1.0)};
NSDictionary *attributesDictionary = @{
UIFontDescriptorFamilyAttribute : @"Helvetica Neue",
UIFontDescriptorTraitsAttribute : fontTraitsDictionary
};
UIFontDescriptor *ultraLightDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:attributesDictionary];
UIFont *shouldBeAnUltraLightFont = [UIFont fontWithDescriptor:ultraLightDescriptor size:24];
NSLog(@"%@", shouldBeAnUltraLightFont);我希望shouldBeAnUltraLightFont的值是HelveticaNeue-UltraLight的一个实例,但实际上它是:
<UICTFont: 0x908d160> font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 24.00pt据我所知,我正在跟踪苹果的文档。为什么字体族和字体权重信息被完全忽略了?
Things我试过
不管这些更改,返回的字体总是一个普通重量的Helvetica的普通实例。
发布于 2014-11-26 21:58:49
我遇到了同样的问题,而这些文档并没有多大帮助。最后,我发现使用家族属性与face属性相结合是有效的:
UIFontDescriptor* desc = [UIFontDescriptor fontDescriptorWithFontAttributes:
@{
UIFontDescriptorFamilyAttribute: @"Helvetica Neue",
UIFontDescriptorFaceAttribute: @"Light"
}
];发布于 2014-08-12 06:14:18
字体特征字典键 下列常量可用作键,从特征字典中检索有关字体描述符的信息。 NSString *const UIFontSymbolicTrait;NSString *const UIFontWeightTrait;NSString *const UIFontWidthTrait;NSString *const UIFontSlantTrait;
在我看来,这些键只是为了从字体描述符中获取信息而设计的,而不是为了设置它。例如,您可以这样做:
UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
NSDictionary *traits = [font.fontDescriptor objectForKey:UIFontDescriptorTraitsAttribute];
CGFloat weight = [traits[UIFontWeightTrait] floatValue];这将告诉你,你得到的字体比正常的重量要重一点。这看起来并不像要求字体重量更轻而不必给出确切的名称那样有用--但这似乎是预期的用法。
发布于 2014-12-01 16:11:32
在寻找粗体或斜体字时,象征性的特征至少会得到尊重。所以这件事很好用:
+ (UIFont*)fontWithFamily:(NSString*)family bold:(BOOL)bold italic:(BOOL)italic size:(CGFloat)pointSize {
UIFontDescriptorSymbolicTraits traits = 0;
if (bold) traits |= UIFontDescriptorTraitBold;
if (italic) traits |= UIFontDescriptorTraitItalic;
UIFontDescriptor* fd = [UIFontDescriptor
fontDescriptorWithFontAttributes:@{UIFontDescriptorFamilyAttribute: family,
UIFontDescriptorTraitsAttribute: @{UIFontSymbolicTrait:
[NSNumber numberWithInteger:traits]}}];
NSArray* matches = [fd matchingFontDescriptorsWithMandatoryKeys:
[NSSet setWithObjects:UIFontDescriptorFamilyAttribute, UIFontDescriptorTraitsAttribute, nil]];
if (matches.count == 0) return nil;
return [UIFont fontWithDescriptor:matches[0] size:pointSize];
}例如[MyClass fontWithFamily:@"Avenir Next Condensed" bold:YES italic:NO size:12.0f];
我不认为这对OP有帮助,因为OP专门使用UIFontWeightTrait寻找一种轻巧的字体,但它可能会帮助其他有类似问题的人。
https://stackoverflow.com/questions/24910599
复制相似问题