自定义字体在iOS 8中不起作用

时间:2014-09-20 15:39:33

标签: ios xcode

我的项目中包含了一个自定义字体,在我将Xcode升级到版本6并将iOS 8作为基本SDK之前,它完全正常。现在,如果我在iOS 8模拟器或设备上运行应用程序,自定义字体将不再有效,但它仍然适用于我的iOS 7设备。有什么建议吗?

5 个答案:

答案 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)")
        }
    }