Macos 当请求Myriad Pro的粗体版本时,为什么核心文本返回Myriad Pro半粗体

Macos 当请求Myriad Pro的粗体版本时,为什么核心文本返回Myriad Pro半粗体,macos,fonts,core-text,opentype,ctfont,Macos,Fonts,Core Text,Opentype,Ctfont,我安装了常用的Adobe Myriad Pro字体。其中包括Myriad Pro Regular、Myriad Pro Bold和Myriad Pro Semibold。假设我有一个指向Myriad Pro Regular的CTFontRef baseFont,并且我想要的字体大小是size。我运行以下代码: CTFontRef boldFont = CTFontCreateCopyWithSymbolicTraits(baseFont, size, NULL, kCTFontBoldTrait

我安装了常用的Adobe Myriad Pro字体。其中包括Myriad Pro Regular、Myriad Pro Bold和Myriad Pro Semibold。假设我有一个指向Myriad Pro Regular的
CTFontRef baseFont
,并且我想要的字体大小是
size
。我运行以下代码:

CTFontRef boldFont = CTFontCreateCopyWithSymbolicTraits(baseFont, size, NULL, kCTFontBoldTrait, kCTFontBoldTrait);
返回的字体是Myriad Pro半黑体,而不是Myriad Pro黑体

除了请求命名样式“Bold”之外,是否有其他方法强制此项返回Myriad Pro Bold?我想让这段代码完全通用,没有硬连接样式名称


我在各种排列中尝试过这种方法,包括在最初创建字体时将粗体特征作为属性字典的一部分传递,避免了这里描述的两步过程,但它仍然返回半粗体字体,而不是普通粗体字体。我也对字体本身进行了一些探索。全加粗字体在其
表格中的权重为700,半加粗字体的权重为600。全景权重与此相对应。但是,半粗体和粗体字体的
表中的
macStyle
字段都设置了粗体标志,因此,这大概就是核心文本所使用的内容。但是有没有办法让它更具辨别力呢?

基于对文档的阅读,再加上一些关于字体处理的一般知识,而不是核心文本的具体知识,我认为这是可能的,但并不简单

指定
symTraitValue
SYMTRAITMAK
参数的类型为
CTFONTSYMBOLCTRAITS
。定义您正在使用的“粗体”值

kCTFontBoldTrait = (1 << 1)

kCTFontBoldTrait=(1对于
CtfontWeightDescriptor
您可以指定一个属性
kCTFontTraitsAttribute
,该属性应为
CFDictionaryRef
,其中您可以指定
kCTFontWeightTrait
,该属性采用一个表示-1和1之间的浮点值的
CFNumberRef
,为您提供一个权重谱,1为最粗体的变体,0为常规/中等