xcode自定义ttf字体不起作用

时间:2012-04-28 20:04:27

标签: iphone ios xcode fonts label

好吧所以我一直在阅读SO并做各种谷歌搜索,但我无法弄清楚为什么我的字体不起作用。

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

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

这是我所做的一步一步。

第1步:我从互联网上下载了.ttf文件。在我的发现者看起来像: 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"
)

2 个答案:

答案 0 :(得分:38)

我怀疑您没有将字体文件添加到目标中,因此不会将其复制到应用程序的资源中。您的代码在这里工作正常,字体在字体系列列表中显示为“按Start K”。

答案 1 :(得分: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)")
   }
}

目标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或.otf)匹配,但引用字体的代码必须与从此输出中获得的字体名称匹配。祝你好运吗!