自定义字体在故事板?
我有一个字体添加到我的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 ,值为您的自定义字体的名称。
就是这样,你甚至不需要导入类别。 这样您就不需要每个需要自定义字体的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字体,以更精确的方式预览完成的应用程序的外观和尺寸。
您可以在故事板中设置标签字体。您可以按照以下步骤操作
- 让你自定义字体文件( .ttf, .ttc)
-
将字体文件导入到Xcode项目中
-
在app-info.plist中 ,添加一个名为Fonts提供的按键,它是一个数组types,将所有字体文件名添加到数组中, 注意:包括文件扩展名。
- 在故事板中,将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