如何创建既粗体又斜体的NSFont?

时间:2010-03-12 13:52:45

标签: cocoa fonts

这是关于Cocoa中字体处理的初学者问题。我有一个字体系列,例如 Verdana ,具有以下字体:常规粗体斜体粗体斜体。我知道这些字体存在,因为它们在字体面板中可用。

这有效:

NSFont *regular = [NSFont fontWithName:@"Verdana" size:75];
NSFont *bold = [NSFont fontWithName:@"Verdana-Bold" size:75];
NSFont *italic = [NSFont fontWithName:@"Verdana-Italic" size:75];

这不起作用:

NSFont *boldItalic = [NSFont fontWithName:@"Verdana-Bold Italic" size:75];

获取给定字体系列的 Bold Italic 版本的最简单方法是什么?

4 个答案:

答案 0 :(得分:21)

这有效:

NSFontManager *fontManager = [NSFontManager sharedFontManager];
NSFont *boldItalic = [fontManager fontWithFamily:@"Verdana"
                                          traits:NSBoldFontMask|NSItalicFontMask
                                          weight:0
                                            size:75];

答案 1 :(得分:8)

参见NSFontManager和-convertFont:toHaveTrait:

有关详细信息,建议您阅读Font Handling Guide,特别是标题为Converting Fonts Manually的部分。

请注意,您使用的字体需要具有您要求的特征的某些版本,否则,您将获得字体,但没有请求的特征。

如果您最终想要将一个斜体特征添加到没有斜体的字体中,请查看:

How do I get Lucida Grande italic into my application?

答案 2 :(得分:6)

Verdana-BoldItalic

(字体的粗体斜体变体的实际名称取决于系列,某些字体没有粗体斜体,使用NSFontDescriptor-fontDescriptorWithSymbolicTraits:来获得确切的粗体斜体字体。)

答案 3 :(得分:0)

我发现以下UIFont类别非常有用:

@implementation UIFont (Styles)
- (instancetype)bold
{
    return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:(self.fontDescriptor.symbolicTraits|UIFontDescriptorTraitBold)] size:self.pointSize];
}

- (instancetype)italic
{
    return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:(self.fontDescriptor.symbolicTraits|UIFontDescriptorTraitItalic)] size:self.pointSize];
}
@end

使用UIFontDescriptorSymbolicTraits返回现有字体的粗体/斜体版本。这是一种很好的方式来更改,例如,单元格的文本或detailText为粗体斜体,或 两者 ,只需执行以下操作:

cell.textLabel.font = cell.textLabel.font.bold;
cell.detailTextLabel.font = cell.detailTextLabel.font.italic;

注意:新样式与任何现有特征都是“或”,因此您可以通过以下方式合并样式以获取

cell.textLabel.font = cell.textLabel.font.bold.italic;