我正在尝试在iPhone上运行一组Neo Sans Pro字体。我有四个权重:Light,Regular,Medium,Bold作为OTF文件(NeoSansPro-Light.otf,-Regular.otf等)。这些文件包含在构建中,并在info.plist中注册。
调用[UIFont fontNamesForFamilyName:@"Neo Sans Pro"]
会返回一个包含4个条目的数组,例如“NeoSansPro-光”。
我可以使用UIFont fontWithName:size:
检索每个字符串的字体对象。
然而,当我用它们绘制文本时,Light,Regular和Medium版本都绘制完全相同,看起来像Light版本。 Bold版本的描述不同。
根据Font Book,每个字体文件都包含不同的字形。
我完全被难过 - 任何线索我需要做什么?
[补充] 还有一些调查:
NSArray *fonts = [UIFont fontNamesForFamilyName:@"Neo Sans Pro"];
for (NSString *fname in fonts) {
UIFont *font = [UIFont fontWithName:fname size:12.0];
NSLog(@"name: %@ font: %@", fname, font);
}
运行此代码会提供以下日志输出:
name: NeoSansPro-Light font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px
name: NeoSansPro-Regular font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px
name: NeoSansPro-Medium font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px
name: NeoSansPro-Bold font: <UICFFont: 0xaa06070> font-family: "Neo Sans Pro"; font-weight: bold; font-style: normal; font-size: 12px
所以显示相同的三种字体确实是相同的。但是构建中有四种字体权重和四种字体。
答案 0 :(得分:10)
看起来这是与此处相同的问题:Including multiple fonts of the same family in an iPad application
如果同一个字体系列中有多个字体,并且不会回传正确的字体,那么iOS字体架构似乎会变得混乱。解决方案是手动编辑字体系列信息(使用类似Font Forge的不同值。
E.g。对于Neo Sans Pro Light字体,将字体系列(在PSNames和TTF名称中)设置为“NSP Light”。同样适用于Neo Sans Pro Regular - &gt; NSP Regular等。
然后,您可以按原始名称引用字体,例如“NeoSansPro-光”
丑陋,但确实有效。
答案 1 :(得分:0)
Font forge看起来对我来说太过分了,所以我创建了一个方法来读取某个系列的fontsArray中字体的描述并返回相应的字体。
- (UIFont*) getFontWithFamilyName:(NSString*)familyName bold:(Boolean)bold italic:(Boolean)italic size:(uint)size {
NSArray *fonts = [UIFont fontNamesForFamilyName:familyName];
for (NSString *fname in fonts) {
UIFont *font = [UIFont fontWithName:fname size:size];
Boolean isBold = [[font description] rangeOfString:@"bold"].location != NSNotFound;
Boolean isItalic = [[font description] rangeOfString:@"italic"].location != NSNotFound;
if (isBold == bold && isItalic == italic) {
return font;
}
}
//-- font was not found, provide system font bold or normal
if (bold) {
return [UIFont boldSystemFontOfSize:size];
} else {
return [UIFont systemFontOfSize:size];
}
}
答案 2 :(得分:0)
我使用的是名为Arvo的Google字体。它有以下文件:
这些名称已添加到我的应用程序的info.plist中,但出于某种原因,我的应用程序只能读取粗体,粗体和斜体字体。当我试图加载它时,它无法读取常规字体。但是,在打印出字体名称之后,Arvo-Regular在我的应用程序中被识别为Arvo。