这是关于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 版本的最简单方法是什么?
答案 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的部分。
请注意,您使用的字体需要具有您要求的特征的某些版本,否则,您将获得字体,但没有请求的特征。
如果您最终想要将一个斜体特征添加到没有斜体的字体中,请查看:
答案 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;