31

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

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

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

一步一步这就是我所做的。

第 1 步:我从互联网上下载了 .ttf 文件。在我的取景器中,它看起来像: 在此处输入图像描述

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

在此处输入图像描述

第 3 步:我在字体册中打开字体以查看真正的文件名是什么,我看到了: 在此处输入图像描述

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

在此处输入图像描述

第 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"
)
4

2 回答 2

38

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

于 2012-04-28T20:46:37.787 回答
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(name: "yourFontName", size: 24.0) (swift) 或 [UIFont fontWithName:@"yourFontName" size:16.0f] (obj c) 的字体的实际名称。您添加到 plist 的自定义字体名称必须与目录中调用的任何文件(包括 .ttf 或 .otf)匹配,但引用字体的代码必须与您从此输出中获得的字体名称匹配。祝字体大师好运!

于 2013-11-25T23:20:14.973 回答