【发布时间】:2012-01-17 06:38:06
【问题描述】:
我想在我的 iphone 应用程序中使用字体“MgOpen Modata”。但我没有在属性检查器的字体列表中看到它。
如何包含该字体以便我可以使用它?
【问题讨论】:
标签: iphone objective-c cocoa-touch iphone-sdk-3.0 ios4
我想在我的 iphone 应用程序中使用字体“MgOpen Modata”。但我没有在属性检查器的字体列表中看到它。
如何包含该字体以便我可以使用它?
【问题讨论】:
标签: iphone objective-c cocoa-touch iphone-sdk-3.0 ios4
如果要更改字体样式,可以直接使用[UIFont fontWithName:@"ArialMT" size:14]; 方法。此外,iPhone 库中可能没有所有字体。请参阅this 以获取可用的字体样式。
【讨论】:
Info.plist:使用密钥Fonts provided by application 添加一个新条目。在下面的示例中,我添加了字体“DejaVu Sans Mono”:
在您的应用程序中,您可以使用[UIFont fontWithName:@"DejaVuSansMono-Bold" size:14.f]。
或者如果你想在 html/css 中使用它,只需使用font-family:DejaVu Sans Mono;
注意:这在 iOS 3.2 及更高版本中可用。
【讨论】:
如果您有 .otf 格式。有时这种格式不起作用。将 .otf 格式转换为 .ttf。网上有一堆字体转换器。 如上所述,将自定义字体添加到应用程序提供的字体下的 .plist 文件后。确保在 Build Phase -> copy Bundel Resource 下的 Project Target 中存在该文件。如果没有,则添加它。 然后只需在您的代码中添加此 [UIFont fontWithName:@"your custom font" size:your selection of size];
【讨论】:
我发现this walkthrough 是最好的
虽然上面接受的答案确实有效,但我发现如果您将文本添加到 XIB 文件中,然后将字体设置为我们的新字体,那么文本不会更新。
确保新字体包含在资源中解决了这个问题(直接取自演练):
“这应该不是问题,但有时当您无法显示字体时,这可能会让人头疼,所以现在让我们仔细检查以排除潜在的缺陷。
通过在解决方案资源管理器中突出显示 XCode 项目文件并在右侧选择“构建阶段”,转到您的项目构建阶段窗格。您会看到可以展开的部分之一是“复制捆绑资源”。打开该列表并确保您的字体包含在该列表中。”
演练中的其他内容是相同的内容(将文件添加到您的项目和 plist 文件中)
此答案的所有功劳归功于 Code with Chris,这为我节省了很多时间和精力,我只是从他的页面上复制了一个镜头,以使该答案能够自立,而不是要求您单击链接。
【讨论】:
大多数时候我们忘记给应用程序 Target 添加字体。确保您没有忘记这一重要步骤。注意检查右侧面板 File Inspector > Target Membership 复选框。
您还可以通过在应用程序的任何位置运行此代码 sn-p 来检查字体是否已正确添加到您的应用程序中。
for (NSString* family in [UIFont familyNames])
{
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family])
{
NSLog(@" %@", name);
}
}
编辑
字母顺序:
for (NSString* family in [[UIFont familyNames] sortedArrayUsingSelector:@selector(compare:)])
{
NSLog(@"%@", family);
for (NSString* name in [[UIFont fontNamesForFamilyName:family] sortedArrayUsingSelector:@selector(compare:)])
{
NSLog(@" %@", name);
}
}
这将在您的应用中填充可用字体列表,您添加的字体也将出现在该列表中。
【讨论】:
不要忘记将字体添加到目标编译包资源,方法是转到 'Targets' -> 'Build Phases' -> 'Copy Bundle Resources' 并手动添加所有字体
【讨论】:
我认为对于开发人员来说,将 plist 结构作为原始源代码会更好。我将其留作复制/粘贴:
<key>UIAppFonts</key>
<array>
<string>Roboto-BoldItalic.ttf</string>
<string>Roboto-Medium.ttf</string>
<string>Roboto-MediumItalic.ttf</string>
<string>Roboto-Regular.ttf</string>
<string>Roboto-Bold.ttf</string>
</array>
复制此 sn-p 并将字符串键修改为数组中所需的字体。 提示:要将 plist 作为原始源代码查看,请单击文件上方的辅助按钮并选择 Open As -> Source code。
编辑
// Logs fonts ordered by name
for (NSString* family in [[UIFont familyNames] sortedArrayUsingSelector:@selector(compare:)])
{
NSLog(@"%@", family);
for (NSString* name in [[UIFont fontNamesForFamilyName:family] sortedArrayUsingSelector:@selector(compare:)])
{
NSLog(@" %@", name);
}
}
添加字体后,添加到(例如)AppDelegate.m 类以查看真正的字体名称(在捆绑包上)可能很有用。我多次遇到的一个问题是我加载了错误名称的字体,假设字体文件名是正确的。有时它与捆绑实名不同。 除此之外,您还可以使用 finder (macOS) 上的文件信息窗口 (cmd+i) 检查文件全名。
举例说明:
文件名 = “DroidSansEthiopic-Regular”
bundle 中的已处理名称 = "Droid Sans Ethiopic"
【讨论】: