关于ios:我可以在iPhone应用程序中嵌入自定义字体吗?

Can I embed a custom font in an iPhone application?

此问题与iOS 3.2之前版本有关。从3.2开始,使用下面的samvermette的答案可以很容易地实现这个功能,我已经将接受的答案(从command改为samvermette)更改为反映这一点。我不能把这两个答案都归功于(除了赞成票),但它们都是好的。

我想让一个应用程序包含一个自定义字体来呈现文本,加载它,然后与标准的UIKit元素(如UILabel)一起使用。这有可能吗?

我发现以下链接:

  • http://discussions.apple.com/thread.jspa?消息ID=8304744
  • http://forums.macrumers.com/showthread.php?t=569311

但这些都需要我自己呈现每个字形,这有点像刻苦的工作,特别是对于多行文本。

我还发现一些帖子直截了当地说这是不可能的,但没有理由,所以我正在寻找一个明确的答案。

编辑-失败的-[UIFont fontWithName:size:]实验

我下载了harrowprint.tff(从这里下载),并将其添加到我的资源目录和项目中。然后我尝试了这个代码:

1
UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];

导致引发异常。查看finder中的ttf文件,确认字体名是harrowprint。

编辑-到目前为止,已经有很多回复告诉我要阅读x或y上的文档。我已经对所有这些进行了广泛的实验,但一无所获。在一个案例中,X只与OS X相关,而与iPhone无关。因此,我为这个问题设置了一个赏金,我将把这个赏金授予第一个提供答案(只使用文档化的API)的人,他用足够的信息来响应,以便在设备上工作。在模拟器上工作也是一种奖励。

编辑-看起来赏金自动奖励的答案与最高的票数。有趣。实际上,没有人能提供一个答案来解决这个问题——包括编写自己的UILabel子类的解决方案不支持换行,这是我的一个基本特性——不过我想我可以扩展它来解决这个问题。


iOS 3.2及更高版本支持此功能。直接从iPhone OS 3.2的新增功能文档:

Custom Font Support
Applications that want to use custom fonts can now include those fonts in their application bundle and register those fonts with the system by including the UIAppFonts key in their Info.plist file. The value of this key is an array of strings identifying the font files in the application’s bundle. When the system sees the key, it loads the specified fonts and makes them available to the application.

Info.plist中设置字体后,可以将自定义字体用作ib或编程中的任何其他字体。

苹果开发者论坛上有一个持续的主题:https://devforums.apple.com/thread/37824(需要登录)

下面是一个关于如何实现这一点的非常简单的3个步骤教程(删除了断开的链接)

  • 使用Xcode作为资源将自定义字体文件添加到项目中
  • 在您的Info.plist文件中添加一个名为UIAppFonts的密钥。
  • 使此键成为数组
  • 对于每个字体,输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项。
  • 保存Info.plist
  • 现在,在您的应用程序中,您可以简单地调用[UIFont fontWithName:@"CustomFontName" size:12]来获取自定义字体,以便与uilabels和uitextview等一起使用。
  • 另外:确保字体在您的复制包资源中。


    编辑:从iOS 3.2开始,此功能是内置的。如果您需要支持3.2之前的版本,您仍然可以使用此解决方案。

    我创建了一个扩展UILabel并处理加载.ttf文件的简单模块。我在Apache许可证下发布了它opensource,并把它放在了Github上。

    重要的文件是FontLabel.hFontLabel.m

    它使用了一些来自GenericRich答案的代码。

    在此处浏览源。

    • 将字体文件复制到资源中

    • 在您的Info.plist文件中添加一个名为uiappfonts的密钥。(应用程序提供的字体)

    • 使此键成为数组

    • 对于您拥有的每个字体,输入字体文件(包括扩展名)的全名作为uiappfonts数组的项。

    • 保存Info.plist

    • 现在,在您的应用程序中,您可以简单地调用[UIFont fontWithName:@"CustomFontName" size:15]来获取自定义字体,以便与UILabelsUITextViews等一起使用。

    更多信息


    在iOS4中有一种使用自定义字体的简单方法。

  • 将字体文件(例如,Chalkduster.ttf添加到xcode中项目的resources文件夹中。
  • 打开Info.plist并添加一个名为UIAppFonts的新密钥。此键的类型应为数组。
  • 将自定义字体名称添加到此数组,包括扩展名(Chalkduster.ttf)。
  • 现在您可以在应用程序中使用[UIFont fontWithName:@"Chalkduster" size:16]
  • 不幸的是,ib不允许用自定义字体初始化标签。请参阅此问题以解决此问题。我最喜欢的解决方案是使用自定义UILabel子类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @implementation CustomFontLabel

    - (id)initWithCoder:(NSCoder *)decoder
    {
        if (self = [super initWithCoder: decoder])
        {
            [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
        }
        return self;
    }

    @end


    在info.plist中,添加"应用程序提供的字体"条目,并将字体名称作为字符串包含:

    1
    2
    3
    4
    Fonts provided by application
               Item 0        myfontname.ttf
               Item 1        myfontname-bold.ttf
               ...

    然后检查以确保您的字体包含在运行中:

    1
    2
    3
    4
    5
    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
             NSLog(@"%@", fontName);
        }
    }

    请注意,TTF文件名可能与设置标签字体时使用的名称不同(可以使用上面的代码获取"fontWithName"参数):

    1
    [label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];


    编辑:此答案从IOS3.2起失效;使用uiappfonts

    我成功加载自定义UIFont的唯一方法是通过私有的graphicssservices框架。

    下面将加载应用程序主包中的所有.ttf字体:

    1
    2
    3
    4
    5
    6
    7
    8
    BOOL GSFontAddFromFile(const char * path);
    NSUInteger loadFonts()
    {
        NSUInteger newFontCount = 0;
        for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
            newFontCount += GSFontAddFromFile([fontFile UTF8String]);
        return newFontCount;
    }

    一旦字体被加载,它们就可以像苹果提供的字体一样使用:

    1
    2
    NSLog(@"Available Font Families: %@", [UIFont familyNames]);
    [label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

    如果将来API消失,甚至可以在运行时加载graphicssservices:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #import <dlfcn.h>
    NSUInteger loadFonts()
    {
        NSUInteger newFontCount = 0;
        NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
        const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
        if (frameworkPath) {
            void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
            if (graphicsServices) {
                BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices,"GSFontAddFromFile");
                if (GSFontAddFromFile)
                    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
            }
        }
        return newFontCount;
    }


    使用iOS 8Xcode 6可以很容易地做到这一点。步骤如下:

    1)将字体拖放到Xcode支持文件文件夹中。别忘了在"添加到目标"部分标记应用程序。从现在起,您可以在IB中使用此字体,并从字体托盘中选择它。

    enter image description here

    2)要使此字体在设备中可用,请打开info.plist并添加Fonts provided by application键。它将包含项0键,您必须添加字体名称作为值。字体名称可能与字体文件名不同。但是首先,尝试在大多数情况下添加文件名。

    enter image description here

    如果没有,这篇文章总是对我有帮助。

    这是本文中帮助您查找字体名称的代码片段。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    func allFonts(){

       for family in UIFont.familyNames(){

           println(family)


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

       }

    }

    编辑

    我要提到的是,您需要将字体文件添加到目标的构建阶段,复制捆绑资源。如果没有它,您将无法在设备上看到您的字体。这可能导致意想不到的行为。

    例如,我遇到一个bug,当时UITextField有自定义字体,但这个字体不在copy bundle资源中。当我用这个textfield转到viewcontroller时,在调用viewDidLoad函数之前大约有4秒钟的延迟。解决字体问题消除了这个延迟。所以,建议检查两次。(rdar://20028250)顺便说一句,我无法重现这个bug,但我确信字体有问题。


    我是这样做的:

    加载字体:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (void)loadFont{
      // Get the path to our custom font and create a data provider.
      NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"];
      CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);

      // Create the font with the data provider, then release the data provider.
      customFont = CGFontCreateWithDataProvider(fontDataProvider);
      CGDataProviderRelease(fontDataProvider);
    }

    现在,在你的drawRect:中,做如下的事情:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    -(void)drawRect:(CGRect)rect{
        [super drawRect:rect];
        // Get the context.
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextClearRect(context, rect);
        // Set the customFont to be the font used to draw.
        CGContextSetFont(context, customFont);

        // Set how the context draws the font, what color, how big.
        CGContextSetTextDrawingMode(context, kCGTextFillStroke);
        CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
        UIColor * strokeColor = [UIColor blackColor];
        CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
        CGContextSetFontSize(context, 48.0f);

        // Create an array of Glyph's the size of text that will be drawn.
        CGGlyph textToPrint[[self.theText length]];

        // Loop through the entire length of the text.
        for (int i = 0; i < [self.theText length]; ++i) {
            // Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
            textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
        }
        CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
        CGContextSetTextMatrix(context, textTransform);
        CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
    }

    基本上,你需要做一些强力的循环,通过文本和神奇的数字,以找到你的偏移量(这里,见我使用29)在字体,但它是有效的。

    另外,您必须确保字体是合法嵌入的。大多数人没有,也有专门从事这类事情的律师,所以要受到警告。


    如果您使用的是xcode 4.3,则必须根据线程中https://stackoverflow.com/users/1292829/arne的自定义字体xcode 4.3,将font添加到Build Phase下的Build Phase中。这对我很有用,以下是我在应用程序中使用自定义字体所采取的步骤:

  • 将字体添加到项目中。我把OTF文件(或TTF文件)拖到我创建并接受xcode选择copying the files over to the project folder的新组中。
  • 使用列为数组中项目的字体创建UIAppFonts数组。只是names,而不是扩展名(如"GothamBold",GothamBold-Italic)。
  • 单击屏幕左侧的Project Navigator顶部的project name方式。
  • 单击xcode主区域中显示的Build Phases选项卡。
  • 展开"Copy Bundle Resources部分,点击"+"添加字体。
  • 从单击"+"时弹出的文件导航器中选择字体文件。
  • 对你必须使用的每种字体都这样做。

  • 是的,您可以包括自定义字体。参考有关uifont的文档,特别是fontWithName:size:方法。

    1)确保在资源文件夹中包含字体。

    2)字体的"名称"不一定是文件名。

    3)确保您具有使用该字体的合法权利。通过将其包含在你的应用程序中,你也在分发它,你需要有权这样做。


    下面是如何操作的分步说明。不需要额外的库或任何特殊的编码。

    http://shang-liang.com/blog/custom-fonts-in-ios4/

    大多数情况下,问题在于字体而不是方法。最好的方法是使用一种字体,如Verdana或Geogia。然后更改为所需的字体。如果不起作用,可能是字体名称不对,或者字体格式不正确。


    在现有的iOS应用程序上添加新字体非常容易。

    您只需将字体(如FONT.TTF)添加到资源文件夹中即可。

    打开应用程序info.plist。将新行添加为"应用程序提供的字体",并将字体名称键入FONT.TTF。

    当设置字体时,请按setFont:"corresponding Font Name"设置。

    您可以检查您的字体是否由NSArray *check = [UIFont familyNames];添加。

    它返回应用程序支持的所有字体。


    我建议您遵循我最喜欢的简短教程:http://codewithchris.com/common-errors-with-adding-custom-fonts-to-your-ios-app/,从中获得这些信息。

    步骤1-将.ttf或.otf从finder拖到项目中

    注意-确保在主应用程序目标上单击"添加到目标"框。

    Drag font files into your project and click to add them to your target

    如果忘记单击将其添加到目标中,请单击项目层次结构中的字体文件,然后在右侧面板上单击"目标成员资格"部分中的主应用程序目标。

    how to add fonts to app target if you forgot

    要确保字体是应用程序目标的一部分,请确保它们在构建阶段显示在复制包资源中。

    how to check resources to see if fonts are part of app target

    步骤2-将字体文件名添加到plist

    转到"信息"部分中的自定义iOS目标属性,并向该部分中名为Fonts provided by application的项添加一个键(您在键入时应该看到它作为选项出现,它将自己设置为一个数组)。单击小箭头打开数组项,输入您添加的.ttf或.otf文件的名称,让您的应用程序知道这些是您想要的可用字体文件。

    注意-如果您的应用程序在此步骤之后崩溃,请检查您在此处添加的项目的拼写。

    example plist with custom fonts added

    第3步-找出字体的名称,以便调用它们

    通常情况下,应用程序看到的字体名与您认为基于该字体的文件名的字体名不同,请将其放入代码中,并查看应用程序生成的日志,以查看代码中要调用的字体名。

    迅捷

    1
    2
    3
    4
    5
    6
    for family: String in UIFont.familyNames(){
      print("\(family)")
      for names: String in UIFont.fontNamesForFamilyName(family){
          print("== \(names)")
      }
    }

    目标C

    1
    2
    3
    4
    5
    6
    for (NSString* family in [UIFont familyNames]){
        NSLog(@"%@", family);
        for (NSString* name in [UIFont fontNamesForFamilyName: family]){
            NSLog(@"  %@", name);
        }
    }

    您的日志应该如下所示:

    Example of searching log to find font names

    步骤4-使用新的自定义字体,使用步骤3中的名称

    迅捷

    1
     label.font = UIFont(name:"SourceSansPro-Regular", size: 18)

    目标C

    1
     label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];


    在finder和"get info"中找到ttf。在标题"全名"下:"它给了我一个名字,然后我用在fontWithName上(我只是复制并粘贴了确切的名字,在这种情况下,不需要扩展".ttf")。


    它还没有推出,但是下一个版本的cocos2d(二维游戏框架)将支持变长位图字体作为字符映射。

    http://code.google.com/p/cocos2d-iphone/issues/detail?ID=317

    作者没有这个版本的确切发布日期,但我确实看到了一篇文章,指出它将在下个月或两个月发布。


    一个重要的注意事项是:您应该使用与字体相关联的"PostScript名称",而不是它的全名或姓氏。此名称通常与字体的常规名称不同。


    我在iOS 3.1.2上尝试了本页面上的各种建议,以下是我的结论:

    即使使用fontforge设置了喜欢的名称,只要将[UIFont fontWithName:size:]与resources目录中的字体一起使用也不会起作用。

    如果首先使用gsfontaddfromfile加载字体,[UIFont fontWithName:size:]将工作。但是GSFontAddFromFile不是iOS 3.1.2的一部分,因此必须按照@rpetrich所描述的方式动态加载它。


    按此步骤操作

    1)在项目中复制字体

    2)在源代码模式下打开您的.plist文件…(注-不要打开info.plist)

    3)在此之前-右击字体并在fontforge或类似编辑器中打开,在系统中打开install,应该是install

    4)键入

    1
    2
    3
    4
     <key>UIAppFonts</key>

        <string>MyriadPro.otf</string>
    </array>

    5)在您的class .m中键入此代码。

    1
     [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

    在这里,从您的UILabel起,lblpoints将发生变化。

    完成!!如果字体仍然不起作用,请先检查字体兼容性


    也许作者忘了给字体起一个Mac喜欢的名字?

  • 在fontforge中打开字体,然后转到元素>字体信息
  • 有一个"mac"选项,您可以在其中设置喜欢的名字。
  • 在"文件>导出字体"下,可以创建新的TTF
  • 您也可以在导出对话框中尝试"apple"选项。

    免责声明:我不是iPhone开发者!


    查找ATSApplicationFontsPath

    一个简单的plist条目,允许您在app resources文件夹中包含字体文件,它们在app中"只起作用"。


    首先将.odt格式的字体添加到您的资源中,在本例中,我们将使用diningschriftsd.otf,然后使用此代码将字体分配给标签。

    1
    [theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

    要确保在项目中加载字体,只需调用

    1
    NSLog(@"Available Font Families: %@", [UIFont familyNames]);

    在.plist上,必须声明字体。只需添加一个"应用程序提供的字体"记录,并添加一个带有字体名称的项目0字符串(dinengschriftsd.otf)


    对于iOS 3.2及更高版本:使用上述几种方法,即:

  • 在Xcode中,将字体文件(例如,chackduster.ttf)添加到项目的resources文件夹中。
  • 打开info.plist并添加一个名为uiappfonts的新键。此键的类型应为数组。
  • 将您的自定义字体名称添加到此数组,包括扩展名("粉笔除尘器.ttf")。
  • 在应用程序中使用[UIFont fontWithName:@"Real Font Name" size:16]
  • 但是"真正的字体名"并不总是你在字体簿中看到的那种。最好的方法是问你的设备它看到的字体和确切的名称是什么。

    我使用发布在以下网址的UIFONT名称抓取器:字体名称抓取器

    只需将您想要的字体放到Xcode项目中,将文件名添加到其plist,并在您正在构建的设备上运行它,它将使用UIFont fontWithName:预期的名称向您发送完整的字体列表。


    我已经把这一页上的一些建议结合到iOS 5上的一些东西中。

    首先,必须将自定义字体添加到项目中。然后,您需要遵循@iphonedev的建议,并将字体添加到info.plist文件中。

    这样做之后,就可以:

    1
    2
    UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
    [yourUILabel setFont:yourCustomFont];

    但是,您需要知道字体的PostScript名称。只要按照@daniel wood的建议,当你在fontbook时按command-i。

    然后,享受你的自定义字体。


    更好的解决方案是在您的Info.plist文件中添加一个新属性"Fonts provided by application"。

    然后,您可以使用自定义字体,如普通的UIFont


    有一种使用自定义字体的新方法,从iOS 4.1开始。它允许您动态加载字体,无论是来自应用程序中包含的文件、下载的数据还是您拥有的内容。它还允许您根据需要加载字体,而旧方法在应用程序启动时加载所有字体,如果您有许多字体,这可能会花费太长时间。

    在iOS动态字体加载中介绍了新的方法

    使用CTFontManagerRegisterGraphicsFont函数,为其提供一个包含字体数据的缓冲区。然后它可以用于UIFont和web视图,就像以前的方法一样。下面是该链接的示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    NSData *inData = /* your font-file data */;
    CFErrorRef error;
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
    CGFontRef font = CGFontCreateWithDataProvider(provider);
    if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
        CFStringRef errorDescription = CFErrorCopyDescription(error)
        NSLog(@"Failed to load font: %@", errorDescription);
        CFRelease(errorDescription);
    }
    CFRelease(font);
    CFRelease(provider);


    Swift,代码方式:(也适用于Swift 2.0)

    将所需字体添加到项目中(就像添加图像一样,只需拖动到xcode),确保它们是针对您的项目的。添加此方法并加载自定义字体(在appDelegate didFinishLaunchingWithOptions中推荐)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    func loadFont(filePath: String) {

        let fontData = NSData(contentsOfFile: filePath)!

        let dataProvider = CGDataProviderCreateWithCFData(fontData)
        let cgFont = CGFontCreateWithDataProvider(dataProvider)!

        var error: Unmanaged<CFError>?
        if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
            let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
            print("Unable to load font: %@", errorDescription, terminator:"")
        }

    }

    使用实例:

    1
    2
    3
    if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType:"ttf"){
          loadFont(fontPath)
    }

    使用字体:

    1
    UIFont(name:"My-Font", size: 16.5)


    您可以在资源文件夹中添加所需的"字体"文件。然后转到项目info.plist文件,使用"应用程序提供的字体"键,值为"字体名"。

    然后您可以调用方法[UIFont fontwithName:@"FONT NAME" size:12];


    是的,您可以在应用程序中使用自定义字体

    按照以下步骤逐步进行:

    在支持文件中将自定义字体文件添加到项目中

    在info.plist文件中添加一个名为uiappfonts的键。

    使此键成为数组

    对于您拥有的每个字体,输入字体文件(包括扩展名)的全名作为uiappfonts数组的项。

    立即在应用程序中保存info.plist,您只需调用[uifont font with name:@"您的自定义字体名称"大小:20]即可获得自定义字体,以便与您的uilabels一起使用。应用此字体后,如果字体不正确,则双击自定义字体,仔细查看顶部字体名称是否混合,并复制此字体,粘贴到此处[uifont fontwithname:@"此处超过自定义字体名称"大小:20]

    我希望你能得到正确的答案


    虽然上面的一些答案是正确的,但我已经为仍然有字体问题的人编写了一个详细的视觉教程。

    上面的解决方案告诉您将字体添加到plist并使用

    1
    [self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

    是正确的。现在请使用任何其他黑客方式。如果在查找字体名称和添加字体名称时仍然遇到问题,请阅读以下教程-

    在iOS应用程序中使用自定义字体


    我使一切成为可能,但新字体没有出现,所以我找到了解决方案:

    拖动FOT文件(OTF或TTF)时,不要忘记选中"添加到目标"下的复选框。

    这样做之后,你的字体就会出现,一切都会正常工作。


    是的,您可以在应用程序中使用自定义字体

    按照以下步骤逐步进行:

    • 在支持文件中将自定义字体文件添加到项目中
    • 在您的Info.plist文件中添加一个名为uiappfonts的密钥。
    • 使此键成为数组
    • 对于您拥有的每个字体,输入字体文件(包括扩展名)的全名作为uiappfonts数组的项。
    • 保存Info.plist。现在,在您的应用程序中,您可以简单地调用[UIFont fontWithName:@"your Custom font Name" size:20]来获取自定义字体以与UILabels一起使用。

    如果你的字体不正确,在应用这个之后然后双击自定义字体,仔细查看顶部字体名称是否混合。复制这个字体,粘贴,这里是[UIFont fontWithName:@" here past your Custom font Name" size:20]。我希望你能得到正确的答案


    正如前面所有的答案所指出的,这是非常可能的,并且在较新的iOS版本中相当容易。

    我知道这不是一个技术上的答案,但是由于很多人确实犯了错误(因此实际上违反了许可证,如果你被起诉可能会花很多钱),让我在这里加强一个警告:在iOS(或任何其他类型)应用程序中嵌入自定义字体基本上是在重新分配字体。大多数商业字体的许可证都禁止重新发布,因此请确保您是按照许可证行事的。


    作为一个增强@bdev的答案,这里有一个只列出自定义字体的更新版本。

    步骤1:使用@bdev's answer&save to file查找所有系统字体。

    在第一视图控制器的-(void)viewDidLoad中,在[super viewDidLoad]之后(或在应用程序委托中)输入以下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    NSMutableArray *system_fonts = [NSMutableArray array];
    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            [system_fonts addObject:fontName];
        }
    }
    if([paths count] > 0) {
        [system_fonts writeToFile:[[paths objectAtIndex:0]
                                   stringByAppendingPathComponent:@"array.out"] atomically:YES];
    }

    运行应用程序一次。之后停止。

    步骤2:向项目添加自定义字体

    使用接受答案中显示的方法,添加自定义字体(记住更新.plist并通过检查Add To Target添加要生成的字体文件。

    步骤3:将系统字体与当前字体列表进行比较

    将步骤1中的代码替换为:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    NSMutableArray *system_fonts = [NSMutableArray arrayWithContentsOfFile:[[paths objectAtIndex:0]
                                                                            stringByAppendingPathComponent:@"array.out"]];

    for (NSString *familyName in [UIFont familyNames]) {
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            if (![system_fonts containsObject:fontName]) {
                NSLog(@"%@", fontName);
            }
        }
    }

    运行应用程序,将显示您添加的自定义字体列表。

    这适用于iOS 3.2到iOS 6(未来版本可能工作正常)。与.ttc.ttf一起工作。