Xcode自定义TTF字体无法使用

31

好的,我一直在阅读SO并进行各种搜索,但我无法弄清楚为什么我的字体不起作用。

我认为我已经做得没错,但是当我运行应用程序时,我的按钮上的文本出现了标准系统字体,而不是我导入的字体。我添加了 NSLog(@"%@",[UIFont familyNames]); 以查看它是否在列表中,但它没有出现。这让我觉得我设置错误了。

我希望有人能够帮助我使用自定义字体显示标签中的文本。感谢任何认为他们可能有建议的人!

这是我所做的步骤:

第1步:我从互联网上下载了.ttf文件。在我的finder中,它看起来像这样: enter image description here

第2步:我从finder将字体文件拖到XCode中,并选中“将文件复制到项目文件夹”选项。因此在我的项目中,我可以看到:

enter image description here

第3步:我打开字体书以查看真实的文件名,我看到这个: enter image description here

第4步:我在MyApp-Info.plist文件中添加了一个键,其中包括来自XCode的文件名和文件类型。它看起来像这样:

enter image description here

第5步:然后在我的代码中写入:

UIButton *thisLevelButton = [UIButton buttonWithType:UIButtonTypeCustom];

[thisLevelButton setBackgroundImage:[UIImage imageNamed:@"ccLSButtonPlayed"] forState:UIControlStateNormal];
thisLevelButton.frame = CGRectMake(x, y, BUTTON_WIDTH, BUTTON_HEIGHT);
thisLevelButton.tag = j;
[thisLevelButton addTarget:self action:@selector(userSelectedButton:) forControlEvents:UIControlEventTouchUpInside];
[thisLevelButton.titleLabel setFont:[UIFont fontWithName:@"PressStartK" size:24]];
[thisLevelButton setTitle:[NSString stringWithFormat:@"%i",(j+1)] forState:UIControlStateNormal];

// add the button to the panel
[subScroll addSubview:thisLevelButton];

供参考,这是在字体系列列表中打印出的内容:

(
    Thonburi,
    "Snell Roundhand",
    "Academy Engraved LET",
    "Marker Felt",
    "Geeza Pro",
    "Arial Rounded MT Bold",
    "Trebuchet MS",
    Arial,
    Marion,
    "Gurmukhi MN",
    "Malayalam Sangam MN",
    "Bradley Hand",
    "Kannada Sangam MN",
    "Bodoni 72 Oldstyle",
    Cochin,
    "Sinhala Sangam MN",
    "Hiragino Kaku Gothic ProN",
    Papyrus,
    Verdana,
    "Zapf Dingbats",
    Courier,
    "Hoefler Text",
    "Euphemia UCAS",
    Helvetica,
    "Hiragino Mincho ProN",
    "Bodoni Ornaments",
    "Apple Color Emoji",
    Optima,
    "Gujarati Sangam MN",
    "Devanagari Sangam MN",
    "Times New Roman",
    Kailasa,
    "Telugu Sangam MN",
    "Heiti SC",
    "Apple SD Gothic Neo",
    Futura,
    "Bodoni 72",
    Baskerville,
    "Chalkboard SE",
    "Heiti TC",
    Copperplate,
    "Party LET",
    "American Typewriter",
    "Bangla Sangam MN",
    Noteworthy,
    Zapfino,
    "Tamil Sangam MN",
    "DB LCD Temp",
    "Arial Hebrew",
    Chalkduster,
    Georgia,
    "Helvetica Neue",
    "Gill Sans",
    Palatino,
    "Courier New",
    "Oriya Sangam MN",
    Didot,
    "Bodoni 72 Smallcaps"
)

谢谢您的问题!!我按照指示做了,因为我认为这是对相关问题的回答,结果是肯定的!我的问题现在已经解决了,而且不是针对英文字体,而是波斯文字体。我已经为此苦恼了两年多,即使使用自定义API等也无法找到适当的解决方案。但显然这次Apple很细心,只需将该键添加到info.plist中就可以使用自定义字体。再次感谢! - Neeku
2个回答

38

我猜测您没有将字体文件添加到目标中,因此它没有被复制到应用程序的资源中。您的代码在这里运行良好,并且该字体在字体系列列表中显示为“Press Start K”。


谢谢!这真的很烦人。我想当我拖动文件时,我并没有实际复制到目标位置。所以我删除了ttf文件,然后手动去“我的应用程序”中添加文件。那样就可以了。 - bkbeachlabs
13
Xcode的文件检查器(⌘⌥1)还有一个“目标成员资格”部分,您可以简单地激活该目标的复选框,而不是删除和重新添加文件。 - omz

12

另一个可能性是,在尝试调用字体时可能会使用错误的名称。请使用:

Swift 2.1+

//Check which fonts available
for family: String in UIFont.familyNames()
{
   print("\(family)")
   for names: String in UIFont.fontNamesForFamilyName(family)
   {
       print("== \(names)")
   }
}

Objective C

//Check which fonts available
for (NSString* family in [UIFont familyNames])
{
    NSLog(@"FONT %@", family);

    for (NSString* name in [UIFont fontNamesForFamilyName: family])
    {
        NSLog(@"  %@", name);
    }
}

要找到您在UIFont(name: "yourFontName", size: 24.0) (swift) 或 [UIFont fontWithName:@"yourFontName" size:16.0f] (obj c)中应该使用的实际字体名称。您添加到plist中的自定义字体名称必须与目录中文件的名称相匹配(包括.ttf或.otf),但引用字体的代码必须与此输出中获得的字体名称相匹配。祝各位字体大师好运!


1
谢谢,我遇到了类似的问题,结果发现系统引用的字体名称与我想象中的不同。 - sudo
我建议大家在使用字体名称之前都这样做!好建议! - arniotaki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接