2012-04-28 116 views
29

好吧,所以我一直在阅读并做各种谷歌搜索,但我无法弄清楚为什么我的字体不工作。xcode自定义ttf字体不能正常工作

我认为我所做的一切都是正确的,但是当我运行该应用程序时,我的按钮上的文本显示为标准系统字体而不是我导入的字体。我添加了NSLog(@"%@",[UIFont familyNames]);以查看它是否在列表中,但它不是。这让我觉得我把它设置错了。

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

这是我所做的一步一步。

第1步:我从网上下载了.ttf文件。在我的取景器,它看起来像: enter image description here

步骤2:我从取景器拖到字体文件到Xcode和检查“将文件复制到项目文件夹”选项。所以,在我的项目,我可以看到:

enter image description here

第3步:我打开的字体书的字体看到真实的文件名是什么,我看到: enter image description here

第4步:我用XCode的文件名添加了一个MyApp-Info.plist文件的密钥,包括文件类型。它看起来像这样:

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" 
) 
+0

谢谢你的问题!我按照说明假设它是对相关问题的回答,并且是!我的问题现在已经修复,这不是英文字体,而是波斯文字体。我已经拉出我的头发超过两年了,即使使用自定义API等也找不到合适的解决方案。但显然,Apple此次非常热衷于让我们使用自定义字体,只需将该关键字添加到信息中即可。 plist中。 再次感谢! – Neeku 2013-11-21 10:57:47

回答

37

我怀疑你没有添加字体文件到你的目标,所以它不会被复制到应用程序的资源。您的代码在此处运行良好,字体在字体系列列表中显示为“按开始K”。

+0

谢谢!这太令人讨厌了。我想当我拖动文件,我没有真正复制到目标。所以我删除了ttf文件,然后手动去添加文件到“MyApp”。这有效 – bkbeachlabs 2012-04-28 21:07:31

+13

Xcode的文件检查器('⌘+ 1')也有一个“目标成员”部分,你可以简单地激活目标的复选框,而不是删除和重新添加文件。 – omz 2012-04-28 21:15:27

+0

伟大的技巧感谢 – bkbeachlabs 2012-05-02 16:50:19

12

另一种可能性是,当您尝试调用字体时,您可能会调用错误的字体名称。用途:

斯威夫特2.1+

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

目标C

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

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

要了解你应该UIFont(名称使用字体的实际名称: “yourFontName”大小:24.0)(swift)或[UIFont fontWithName:@“yourFontName”size:16.0f](obj c)。您添加到plist的自定义字体名称必须与您的目录中调用的任何文件(包括.ttf或.txt)匹配。otf),但引用字体的代码必须与从此输出中获得的字体名称相匹配。祝你好运fontmasters!

+1

谢谢,我有一个类似的问题,事实证明,该系统引用字体作为一个不同的名称,然后我以为它是。 – sudo 2014-04-27 16:39:52

+0

在使用字体名称之前,我建议大家都这样做!好的建议! – arniotaki 2014-05-22 08:47:42