Interface Builder 中的自定义字体

Posted

技术标签:

【中文标题】Interface Builder 中的自定义字体【英文标题】:Custom fonts in Interface Builder 【发布时间】:2014-03-28 23:05:31 【问题描述】:

现在是 2014 年,有没有办法在 Interface Builder 中设置自定义字体?即不要以编程方式进行,除了应用程序列表中的“应用程序提供的字体”。

【问题讨论】:

***.com/questions/9683929/… 可能是同一个问题如下:+Designing labels/text views with custom fonts in Interface Builder+Custom font in a storyboard?希望对你有帮助。 【参考方案1】:

是的,马里乌斯是对的。在 Xcode 6 中,您无需使用额外的软件,也无需在代码文件中设置字体。只需将字体文件与其他文件一起添加到项目中即可。并且界面生成器将在自定义字体列表中显示添加的字体。

最令人惊奇的是,xcode 6 会立即在 IB 中显示应用的字体。这是 Apple 的一大亮点。

还要确保在项目的 info.plist 中添加此键“应用程序提供的字体”,并提供字体文件名以查看设备中的效果。

【讨论】:

是的,但是由于某种原因,在将字体添加到项目并在界面生成器中设置标签的字体后 - 字体不会显示在设备上。不过在 IB 中看起来还不错.. 你是对的。你应该做的还有一件事。在项目的 Info.plist 中,您必须添加此键“应用程序提供的字体”。并提供您的字体文件名。这对设备有用。这是应用程序知道这些字体应该包含在应用程序包中的方式。 但前提是它不是属性字符串。至少没有 FontAwesome 和 Open Sans。 哇。在 XCode 出现在 ios 上超过 6 年之后,Apple 的“伟大的补充”......对不起,我喜欢 XCode,但这在很长一段时间内只是不必要的折磨。而且它仍然不能与属性字符串一起工作的事实是荒谬的。 但它确实不可靠。我在我的项目中添加了 Open Sans 字体,并在 info.plist 文件中添加了条目。字体仍然显示在一个 xib 的自定义字体列表中,但不显示其他字体。【参考方案2】:

在 Xcode 6 中,我们在界面生成器中提供了自定义字体。

无需额外的软件。谢谢苹果!

【讨论】:

是的,但是由于某种原因,在将字体添加到项目并在界面生成器中设置标签的字体后 - 字体不会显示在设备上。不过在 IB 中看起来还不错.. @NimaGardideh,属性文本不就是这种情况吗?我也一样。 我记得它也不适用于属性文本。不过,我认为这个问题在后来的一个测试版中得到了解决。 但它确实不可靠。我在我的项目中添加了 Open Sans 字体,并在 info.plist 文件中添加了条目。字体仍然显示在一个 xib 的自定义字体列表中,但不显示其他字体。【参考方案3】:

在 Xcode 6 中,只需在您的项目中添加 ttf 文件并通过自定义字体在情节提要中使用它。 如果您直接想在代码中使用它而不在情节提要中使用它,那么您必须在 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 中的 &lt;/dict&gt; 行之前。

UIFont* font  = [UIFont fontWithName:@"Signika-Regular" size:25];

【讨论】:

太忙了,无法用 IBOutlet 附加每个标签,然后手动更改其字体。 我花了很多时间弄清楚为什么我不能以编程方式设置字体。不,我看到了答案!【参考方案4】:

看起来有人在研究它。你可以看看MoarFonts:

MoarFonts

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

Cédric Luthi “0xced”

花费 10 美元,但是:

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

MoarFonts 与 Xcode 4 和 Xcode 5 兼容。

【讨论】:

好吧,为什么不...我认为这次我不会使用它...但也许这可以暗示 Apple 雇用这些人 ;-) 或者至少告诉他们我们需要这个功能! :D【参考方案5】:

这是我的解决方案,没有其他对我有用

#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-city。 我认为这在 Xcode 8 中已修复,但我没有删除我的代码。

以上是关于Interface Builder 中的自定义字体的主要内容,如果未能解决你的问题,请参考以下文章

使用 Interface Builder 构建的自定义 UIView 可通过 Interface Builder 访问/定位

自定义字体仅在 Interface Builder 中设置时可用

来自 Interface Builder 的自定义 UIView

如果我为标签字体使用外观代理,我无法通过 Interface Builder 设置字体大小

XCode 6.3 错误:Interface Builder 文件中的未知类

通过 monotouch 绑定在 Interface Builder 中创建为 UIView 的自定义控件