我的项目中包含自定义字体,在我将Xcode升级到基于iOS 8的版本6之前,一切都能完美运行。现在,如果我在iOS 8模拟器或设备上运行应用程序,则自定义字体将不再起作用,但在我的iOS 7设备上仍然有效。有什么建议吗?
我的项目中包含自定义字体,在我将Xcode升级到基于iOS 8的版本6之前,一切都能完美运行。现在,如果我在iOS 8模拟器或设备上运行应用程序,则自定义字体将不再起作用,但在我的iOS 7设备上仍然有效。有什么建议吗?
在我的情况下,另一种解决方案有效。当我将字体添加到项目中时,它们没有自动添加到编译后的捆绑资源中。因此,我必须手动添加所有字体,方法是:'Targets' -> 'Build Phases' -> 'Copy Bundle Resources'。这样就可以解决问题了。
static NSString *_myCustomFontName;
+ (NSString *)myCustomFontName
{
if ( !_myCustomFontName )
{
NSArray *arr = [UIFont fontNamesForFamilyName:@"Custom Font Family"];
// I know I only have one font in this family
if ( [arr count] > 0 )
_myCustomFontName = arr[0];
}
return _myCustomFontName;
}
Lars Blumberg 在 Swift 3
中的回答
for family in UIFont.familyNames {
print("\(family)")
for name: String in UIFont.fontNames(forFamilyName: family) {
print("== \(name)")
}
}
http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/中提到,应该列出所有在运行时可用的字体以查看自定义字体是否可用:
for family: String in UIFont.familyNames() {
print("\(family)")
for name: String in UIFont.fontNamesForFamilyName(family) {
print("== \(name)")
}
}
如之前所述,iOS 8及之前版本读取字体名称的方式是不同的。我已经加入了一个检查来决定使用哪个名称:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
OS_SPECIFIC_GOTHIC_FONT = @"New";
} else {
OS_SPECIFIC_GOTHIC_FONT = @"Highway Gothic";
}
您可以使用Finder、获取信息和字体册来查找不同的名称(iOS 8在字体册中使用标题,而其他版本则在获取信息中使用全名)