我的项目中包含了一个自定义字体,在我将Xcode升级到版本6并将iOS 8作为基本SDK之前,它完全正常。现在,如果我在iOS 8模拟器或设备上运行应用程序,自定义字体将不再有效,但它仍然适用于我的iOS 7设备。有什么建议吗?
答案 0 :(得分:20)
就我而言,另一种解决方案有效。当我将字体添加到项目中时,它们不会自动添加到已编译的捆绑包资源中。所以我不得不去'目标' - > '构建阶段' - > '复制捆绑资源'并手动添加所有字体。这就是诀窍
答案 1 :(得分:1)
我找到了"失踪的原因"字体。实际上字体仍然存在,但是从iOS 7到iOS 8,字体名称有一个微妙但突然的变化:在iOS 7中它被称为,例如, " Custom_Font-Style",但现在在iOS 8中它被称为" Custom-Font-Style"。请注意,Custom和Font之间的下划线现在更改为dash。幸运的是,字体系列名称保持不变,因为"自定义字体系列",所以现在我不必硬编码字体名称,而是将其从字体系列中提取出来,如下所示:
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;
}
我不确定字体文件如何显示其信息,但现在我想我的字体文件(自定义字体.ttf)仅提供字体系列名称"自定义字体系列"和iOS从某些规则派生出它的字体名称,由于某种原因从iOS 7变为iOS 8,所以在我们有Custom_Font-Style之前,现在我们有自定义字体样式。
答案 2 :(得分:0)
如前所述,iOS 8和之前版本之间读取字体名称的方式不同。我必须办理登机手续才能决定使用哪个名称:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
OS_SPECIFIC_GOTHIC_FONT = @"New";
} else {
OS_SPECIFIC_GOTHIC_FONT = @"Highway Gothic";
}
您可以使用Finder,获取信息和字体书来查找不同的名称(iOS 8使用字体簿中的标题,而其余的使用获取信息中的全名)
答案 3 :(得分:0)
如http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/所示,应列出运行时可用的所有字体,以查看自定义字体是否可用:
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"/>
<link href="http://acornejo.github.io/bootstrap-nav-wizard/bootstrap-nav-wizard.css" rel="stylesheet"/>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<body>
<div class="container">
<ul class="nav nav-wizard">
<li class="active"><a href="#">Step1</a></li>
<li><a href="#">Step2</a></li>
<li><a href="#">Step3</a></li>
</ul>
<hr>
</div>
</body>
<script type="text/javascript">
$('a').click(function(){
$('li').each(function(){
$(this).removeClass('active');
});
$(this).closest('li').addClass('active');
});
</script>
答案 4 :(得分:0)
Lars Blumberg回答Swift 3
for family in UIFont.familyNames {
print("\(family)")
for name: String in UIFont.fontNames(forFamilyName: family) {
print("== \(name)")
}
}