当我必须包含同一字体家族中的多个字体时,我在iPad应用程序中使用自定义字体有问题。
基本上,有些字体会像其他字体一样呈现,特别是粗体字体。在我的例子中,我有以下四种字体:
Tungsten-Medium (ok)
Tungsten-Black (ok)
钨-Bold
Tungsten-Semibold
系统发现了所有这些,实际上我对介质或黑色没有问题,但是当我选择粗体或半粗体时,结果是黑色<代码>E 217字体!
这个问题影响到本地组件,如UILabel和UITextField,但也影响到我在应用程序中使用的带有自定义css的html文档。
我在项目资源和Info.plist文件中正确地设置了所有内容,甚至尝试以ttf格式转换字体,但是结果没有改变。
我使用的是iOS SDK4.2forandiPad应用程序,重要的是要知道,在这个os之前(在3.2中),我的字体被正确呈现了!
到目前为止,我找到的唯一可行的解决方案是编辑字体和,为每个字体设置一个不同的字体系列,但这意味着代码和html内部要做大量工作,因此我将避免这种情况。
我该试试什么?
发布于 2011-03-10 16:38:06
我找到了一个解决方案--阅读其他论坛。老实说,我认为这与其说是一个真正的解决方案,不如说是一个解决办法。
我使用字体管理器工具(Transtype pro)来编辑字体元数据。我为每种字体设置了一个特定的"OT字体系列“,该字段的值与"PS字体名称”相同。这避免了在不触及代码的情况下混淆同一家族字体的框架。
很丑,但很管用。
发布于 2011-08-11 09:25:58
我创建了一个方法,用于读取特定家族的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];
}
}https://stackoverflow.com/questions/5231391
复制相似问题