自定义字体在故事板?

我有一个字体添加到我的iOS项目。 它在项目中并在项目构build时复制。 它似乎是一个有效的字体,并会显示如果我通过应用程序列出设备上的所有字体。 我已经正确设置了plist来包含字体。 我似乎无法得到显示在Xcode 4.2的故事板部分我的文本控件,button等使用它。 此外,它似乎不允许我键入字体名称,这迫使我使用字体对话框。 我试图在系统中安装这个字体,但似乎无法让它显示在这个列表中。 我只需要在代码中执行此操作,还是可以通过故事板界面执行此操作?

请注意,我可以在代码中使用这个工具,但是通过故事板可以更方便。

更新:Xcode 6界面生成器现在允许您select自定义字体,并将在devise时正确渲染它们。

我知道这个问题是相当古老的,但我一直在努力find一个简单的方法来指定一个自定义字体在故事板(或界面生成器)容易为iOS 5,我发现一个非常方便的解决scheme。

首先,请确保按照本教程将字体添加到项目中。 还要记住UINavigationBar,UITabBar和UISegmentedControl自定义字体可以通过使用UIAppearance代理的setTitleTextAttributes:方法指定。

将下面的类别添加到UIButton,UITextField,UILabel和需要自定义字体的任何其他组件的项目中。 类别只是实现一个新的属性fontName ,它改变了元素的当前字体,同时保持字体大小。

要指定Storyboard中的字体,只需select所需的元素(标签,button,文本视图等),并添加一个用户定义的运行时属性,其中键path设置为stringtypes为string ,值为您的自定义字体的名称。

自定义字体Storyboard

就是这样,你甚至不需要导入类别。 这样您就不需要每个需要自定义字体的UI组件的sockets,也不需要手动对其进行编码。

考虑到字体不会显示在Storyboard中,但是在设备或模拟器上运行时会看到它。


类别文件

UIButton + TCCustomFont.h

 #import <UIKit/UIKit.h> @interface UIButton (TCCustomFont) @property (nonatomic, copy) NSString* fontName; @end 

UIButton + TCCustomFont.m

 #import "UIButton+TCCustomFont.h" @implementation UIButton (TCCustomFont) - (NSString *)fontName { return self.titleLabel.font.fontName; } - (void)setFontName:(NSString *)fontName { self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize]; } @end 

UILabel + TCCustomFont.h

 #import <UIKit/UIKit.h> @interface UILabel (TCCustomFont) @property (nonatomic, copy) NSString* fontName; @end 

UILabel + TCCustomFont.m

 #import "UILabel+TCCustomFont.h" @implementation UILabel (TCCustomFont) - (NSString *)fontName { return self.font.fontName; } - (void)setFontName:(NSString *)fontName { self.font = [UIFont fontWithName:fontName size:self.font.pointSize]; } @end 

UITextField + TCCustomFont.h

 #import <UIKit/UIKit.h> @interface UITextField (TCCustomFont) @property (nonatomic, copy) NSString* fontName; @end 

UITextField + TCCustomFont.m

 #import "UITextField+TCCustomFont.h" @implementation UITextField (TCCustomFont) - (NSString *)fontName { return self.font.fontName; } - (void)setFontName:(NSString *)fontName { self.font = [UIFont fontWithName:fontName size:self.font.pointSize]; } @end 

也可以从GIST下载,也可以作为单个文件下载 。

故障排除

如果您针对运行时错误运行,因为没有指定fontName属性,只需在项目设置中的其他链接器标志下添加标志-all_load以强制链接器包含类别。

从Xcode6.0开始, Xcode6.0发布说明:

界面生成器在devise时呈现embedded的自定义iOS字体,以更精确的方式预览完成的应用程序的外观和尺寸。

您可以在故事板中设置标签字体。您可以按照以下步骤操作

  1. 让你自定义字体文件( .ttf, .ttc)
  2. 将字体文件导入到Xcode项目中

    在这里输入图像描述

  3. app-info.plist中 ,添加一个名为Fonts提供的按键,它是一个数组types,将所有字体文件名添加到数组中, 注意:包括文件扩展名。

在这里输入图像描述

  1. 在故事板中,将UILabel拖到界面,select标签,然后导航到属性检查器 ,单击Fontselect区域的右侧图标button。在popup面板中,selectFont to Custom ,select您embedded的系列字体名称。

在这里输入图像描述

参考

  • Xcode 6.0发行说明
  • WWDC 2014界面生成器中有什么新function
  • IOS-键:UIAppFonts

这是XCode中的一个bug,从3.x开始就一直存在,但仍然没有修复。 我也面临同样的问题,甚至试图把它添加到我的系统没有运气。 这里是另一个关于它的字体不在界面生成器中显示

Monjer的回答是正确的。 如果你像我一样编译后看不到添加的字体,请确保将字体添加到构build阶段(目标 – >构build阶段 – >复制束资源 – >添加字体文件)

redent84的解决scheme真棒!

我只是添加一个改进,添加类NSObject,所以你只需要做一次。

NSObject的+ CustomFont.h

 #import <Foundation/Foundation.h> @interface NSObject (CustomFont) @property (strong, nonatomic) NSString *fontName; @property (strong, nonatomic) UIFont *font; @end 

NSObject的+ CustomFont.m

 #import "NSObject+CustomFont.h" @implementation NSObject (CustomFont) @dynamic font; - (NSString *)fontName { return self.font.fontName; } - (void)setFontName:(NSString *)fontName { self.font = [UIFont fontWithName:fontName size:self.font.pointSize]; } @end 

这些都没有为我工作,但是这样做。

 #import <UIKit/UIKit.h> @interface UILabelEx : UILabel @end #import "UILabelEx.h" #import "Constants.h" @implementation UILabelEx - (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection { [super traitCollectionDidChange: previousTraitCollection]; self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize]; } @end