Interface Builder 中如何使用自定义字体

51

所以现在是2014年,是否已经有一种方法可以在Interface Builder中设置自定义字体?也就是说,不要通过编程来实现,除了在应用程序的plist中提供的“应用程序提供的字体”。


https://dev59.com/IGkw5IYBdhLWcg3wu9Fg - codercat
5个回答

72

是的,Marrius说得对。在Xcode 6中,您无需使用额外的软件或在代码文件中设置字体。只需将字体文件与其他文件一起添加到项目中,Interface Builder将在自定义字体列表中显示已添加的字体。

最令人惊奇的是,Xcode 6会立即在IB中显示应用的字体。这是苹果公司的伟大补充。

还要确保在项目的info.plist中添加此键“Fonts provided by application”并提供您的字体文件名称以在设备上看到效果。


11
在将字体添加到项目并在界面生成器中设置标签字体后,某种原因导致设备上没有显示该字体。但是在界面生成器中看起来很好。 - Nima Gardideh
5
你说得对,还有一件事需要做。在你的项目的Info.plist文件中,你必须添加 "Fonts provided by application" 这个键,并提供你的字体文件名。这样设定之后,应用程序就会明确这些字体应该被包含在应用程序的捆绑包中。 - Asif Bilal
11
只有在它不是一个 attributed string 的情况下,才可以这样做。至少对于 FontAwesome 和 Open Sans 字体来说是如此。 - Fábio Oliveira
4
哇,苹果在XCode推出六年多后增加了一个“伟大的功能”……抱歉,我喜欢XCode,但这只是长时间的不必要的折磨。而且它仍然不能与Attributed Strings一起使用,这太荒谬了。 - thgc
2
但这真的不可靠。我已经在我的项目中添加了Open Sans字体,并在info.plist文件中添加了条目。但是该字体仅在一个xib的自定义字体列表中显示,而其他xib则没有。 - Ans
显示剩余2条评论

14
在Xcode 6中,我们可以在界面构建器中使用自定义字体,无需额外的软件。感谢Apple!

4
在将字体添加到项目并在界面构建器中设置标签的字体后,但出于某种原因,在设备上字体不显示。尽管在IB中看起来很好。 - Nima Gardideh
@NimaGardideh,这不是针对属性文本的情况吗?我也遇到了同样的问题。 - Fábio Oliveira
我记得它对带属性的文本也不起作用。不过,我认为这个问题在后来的测试版中自行解决了。 - Nima Gardideh
1
但这真的不可靠。我已经在我的项目中添加了Open Sans字体,并在info.plist文件中添加了条目。但是该字体仅在一个xib的自定义字体列表中显示,而其他xib则没有。 - Ans

9

在Xcode 6中,只需将ttf文件添加到您的项目中,并通过自定义字体在storyboard中使用它。 如果您想要直接在代码中使用它而不是在storyboard中使用它,则必须在projectName-Info.plist中添加键"UIAppFonts"。

示例:

<key>UIAppFonts</key> 
<array>
    <string>Signika-Bold.ttf</string>
    <string>Signika-Regular.ttf</string>
    <string>Signika-Light.ttf</string>
    <string>Signika-Semibold.ttf</string>
</array> 

在projectName-Info.plist文件中,就在</dict>这行代码之前。
UIFont* font  = [UIFont fontWithName:@"Signika-Regular" size:25];

1
将每个标签与IBOutlet连接并手动更改其字体太繁琐了。 - Ans
我花了很多时间弄清楚为什么我无法通过编程设置字体。现在我看到答案了! - Yestay Muratov

1
这是我的解决方案,其他方法都对我无效。
#import "UILabelEx.h"
#import "Constants.h"

@implementation UILabelEx

//- (void)layoutSubviews
//{
//    [super layoutSubviews];
//    // Implement font logic depending on screen size
//    self.font = [UIFont fontWithName:@"CustomFont" size:self.font.pointSize];
//}

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];
}
@end

真疯狂,这也是我唯一有效的方法。我的自定义字体在代码中可以正常访问。在界面构建器中,它们出现在字体菜单中并可选择。它们在界面构建器中呈现正确。但实际运行在模拟器中时,它就成了“Helvetica城市”。 - Luke Bartolomeo
我认为这个问题在Xcode 8中已经解决了,但我还没有删除我的代码。 - Jules

1

看起来有人在这方面做了些工作。您可以查看MoarFonts

MoarFonts

直接在Interface Builder中为iOS项目使用自定义字体,所见即所得的方式

由Cédric Luthi“0xced”创建

它的价格是10美元,但是:

自从iOS 3.2以来,您可以通过添加UIAppFonts Info.plist键在iOS应用程序中使用自定义字体。不幸的是,在Interface Builder中编辑xib文件时无法使用自定义字体。MoarFonts使您的自定义字体在Interface Builder中可用。

MoarFonts与Xcode 4和Xcode 5兼容。


好的,为什么不呢...我觉得这次我不会用它...但也许这可以给苹果一些雇佣那些家伙的提示;-) - Jonny
1
或者至少让他们知道我们需要这个功能!:D - rdurand

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