在整个应用中将默认字体更改为自定义字体

时间:2015-01-01 12:08:35

标签: ios objective-c iphone swift fonts

我想在iOS应用中保留自定义字体。目前,我使用的是iOS默认字体。 有没有可能的方法呢?

如何包含自定义字体以便我可以使用它?

6 个答案:

答案 0 :(得分:14)

制作类别:

#import "UILabel+Helper.h"

@implementation UILabel (Helper)
- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR {
     self.font = [UIFont fontWithName:name size:self.font.pointSize]; } 
@end

然后在AppDelegate.m中:

[[UILabel appearance] setSubstituteFontName:@"SourceSansPro-Regular"];

即使在UIButtonUILabelUITableViewCellUICollectionViewCellUIViewUIContainerView内,也会改变整个应用中的字体,或者应用程序中的任何位置,无需更改字体磅值。

这是一种节省内存的方法,而不是枚举UIViewController中的所有视图。

答案 1 :(得分:9)

  1. 将您的字体文件复制到资源

  2. 在Info.plist文件中添加一个名为UIAppFonts的密钥。 (“提供的字体 通过申请“)

  3. 将此密钥设为数组

  4. 对于您拥有的每种字体,请输入字体文件的全名 (包括扩展名)作为UIAppFonts数组

  5. 的项目
  6. 保存Info.plist

  7. 现在,在您的应用程序中,您只需调用以下方法即可获得与UILabelUITextView等一起使用的自定义字体...

  8. [UIFont fontWithName:@"CustomFontName" size:15];

    检查资源中可用的字体:

    func allFonts(){
       for family in UIFont.familyNames(){
           println(family)
           for name in UIFont.fontNamesForFamilyName(family.description)
           {
               println("  \(name)")
           }
       }
    }
    

    UILabel中更改整个应用程序的字体:

    AppDelegate.m

    中添加代码
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
         ...
         [[UILabel appearance] setFont:[UIFont fontWithName:@"YourFontName" size:17]];
         ...
    }
    

    更改一个viewConroller字体,与视图设计中设置的字体大小相同:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self setFontFamily:@"YourFontName" forView:self.view andSubViews:YES];
    }
    
    -(void)setFontFamily:(NSString*)fontFamily forView:(UIView*)view andSubViews:(BOOL)isSubViews
    {
        if ([view isKindOfClass:[UILabel class]])
        {
            UILabel *lbl = (UILabel *)view;
            [lbl setFont:[UIFont fontWithName:fontFamily size:[[lbl font] pointSize]]];
        }
    
        if (isSubViews)
        {
            for (UIView *sview in view.subviews)
            {
                [self setFontFamily:fontFamily forView:sview andSubViews:YES];
            }
        }    
    }
    

答案 2 :(得分:1)

1- Drag&将字体文件.ttf删除到您的项目

2-验证字体是否在项目中。

选择字体,并在“工具”区域中验证“目标成员资格”。

enter image description here

3-在plist中添加信息 Plist file image

4-在委托中添加此代码

[[UILabel appearance] setFont:[UIFont fontWithName:@"YourFontName" size:11.0]];

[[UITextField appearance] setFont:[UIFont fontWithName:@"YourFontName" size:11.0]];

[[UITextView appearance] setFont:[UIFont fontWithName:@"YourFontName" size:11.0]];

我希望这会有所帮助

答案 3 :(得分:1)

好的,从所有其他答案中,您现在非常熟悉如何将自定义字体(iOS默认字体除外)添加到应用程序中。

那么现在呢?有一件事仍然存在,我不确定你是否想在任何地方使用相同大小的自定义字体。如果是的话,

我正在使用这种方式在我的应用中使用自定义字体。

如果您的应用只有一个自定义字体,那么您就可以像这样使用整个应用。

#define appFontBold(x) [UIFont fontWithName:@"CustomFont-Bold" size:x]
#define appFontLight(x) [UIFont fontWithName:@"CustonFont-Light" size:x]
#define appFontRegular(x) [UIFont fontWithName:@"CustonFont-Regular" size:x]

我已全局添加这些宏(因此可以从任何地方访问它)

你可以像这样使用它,yourLabel.font = appFontRegular(12);yourTextField.font = appFontBold(14);这可以帮助你处理以下情况,

  1. 每当您需要更改自定义字体时,只需更改宏中的字体名称。
  2. 您的代码看起来很干净,不需要写[UIFont fontWithName: size:];无处不在。
  3. 如果您的应用有多种自定义字体,那么您就可以像这样使用整个应用。

    然后你也可以定义不同的宏,

    然后上面的宏将是相同的(因为这是应用程序中使用的最大字体),对于其他字体:

    #define appFontBoldOtherFont(x) [UIFont fontWithName:@"CustomOtherFont-Bold" size:x]
    #define appFontLightOtherFont(x) [UIFont fontWithName:@"CustonOtherFont-Light" size:x]
    #define appFontRegularOtherFont(x) [UIFont fontWithName:@"CustonOtherFont-Regular" size:x]
    

答案 4 :(得分:-1)

将自定义字体添加到项目中,即将字体文件(CALIBRIZ_0.TTF)拖动到XCode项目中。

修改Info.plist:添加一个包含“Fonts provided by application”键的新条目。

对于您的每个文件,请将文件名添加到此array

现在将字体设置为label

yourLabel.font = [UIFont fontWithName:@"Calibri" size:15];

答案 5 :(得分:-2)

如果要在一个地方更改所有UILabel的所有字体,则需要创建一个UILabel类别。

例如:

#import <UIKit/UIKit.h>

@interface UILabel (AppFont)

@end


@implementation UILabel (AppFont)

-(void)awakeFromNib
{
    self.font = [UIFont fontWithName:@"yourCustomFont" size:self.font.pointSize];
}


@end

创建类别后,您需要为所有文件导入此类,或者您可以将其添加到项目的“.pch”文件中。

按钮/ textview的相同解决方案..