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 中的 </dict>
行之前。
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 设置字体大小