【问题标题】:iPhone : Font is not affecting to UIiPhone:字体不影响 UI
【发布时间】:2013-03-11 10:40:13
【问题描述】:

我在我的应用程序中使用 Constantia 字体系列,regular bolditalic 样式是我的要求,我的问题面对的是,我只能得到常规样式的输出,而不是粗体和斜体,我已经将所有三种样式的字体添加到应用程序中,并在 Fonts provided by application 部分下的 plist 文件中。我尝试了以下

UIFont *bFont = [UIFont fontWithName:@"Constantia-Bold" size:24.0];
UIFont *bFont = [UIFont fontWithName:@"ConstantiaBold" size:24.0];
UIFont *bFont = [UIFont fontWithName:@"Constantia_Bold" size:24.0];

UIFont *iFont = [UIFont fontWithName:@"Constantia-Italic" size:24.0];
UIFont *iFont = [UIFont fontWithName:@"ConstantiaItalic" size:24.0];
UIFont *iFont = [UIFont fontWithName:@"Constantia_Italic" size:24.0];

但没有一个案例有效,只有UIFont *font = [UIFont fontWithName:@"Constantia" size:24.0]; 有效。我知道我只在字体名称中遗漏了一些东西。

我尝试在 Mac 字体选项中找到字体,我在All Fonts 部分(左上角)下找到了这个字体,我发现一个奇怪的是,所有Constantia 粗体斜体regular 安装为一个名称,即仅Constantia

附:字体可以从here下载。

【问题讨论】:

  • UIFont *bFont = [UIFont fontWithName:@"Constantia Bold" size:24.0];
  • 是的,我也试过这个!它没有工作!这对你有用吗?
  • 你安装了那个字体吗?
  • 是的,我已经安装并且知道如何在应用程序中添加和使用自定义字体,但唯一的问题是这个字体。
  • 请问您安装的是哪个版本?

标签: iphone user-interface uifont


【解决方案1】:

这是如何在应用程序中添加自定义字体的步骤。

1 - 在您的应用程序中添加 .TTF 字体
2 - 修改application-info.plist file.
3 - 将键“应用程序提供的字体”添加到新行
4 - 并将每个.TTF 文件(字体)添加到每一行。

更多信息请阅读ThisThis 网站。

粗体

// Equivalent to [UIFont fontWithName:@"FontName-BoldMT" size:17]
UIFont* font = [UIFont fontWithFamilyName:@"FontName" traits:GSBoldFontMask size:17];

加粗/斜体

UIFont* font = [UIFont fontWithMarkupDescription:@"font-family: FontName; font-size: 17px; font-weight: bold/italic;"]; // set here, either bold/italic.

【讨论】:

  • 感谢您的快速回复!正如我在问题中提到的那样,我知道如何将自定义字体添加到应用程序中,并且我也可以使用 Contantia regular 字体,但只有 Bold斜体样式。我已经用字体源 url 编辑了我的问题,如果你有时间看一下。
  • GSBoldFontMask 类型和fontWithMarkupDescription 方法是UIFont 类方法吗?
  • 我从谷歌为你找到了它但我不确定它是否有效..试试吧:)
【解决方案2】:

您可以通过以下方式查看可供您的应用使用的每种字体的真实名称:

// Log fonts
for (NSString *family in [UIFont familyNames])
{
    NSLog(@"Font family %@:", family);
    for (NSString *font in [UIFont fontNamesForFamilyName:family])
        NSLog("    %@", font);
}

【讨论】:

  • 西罗尔,太好了!我试了一下,它记录了,2013-03-11 16:37:17.788 TestApp[2988:11303] Font family Constantia: 2013-03-11 16:37:17.789 TestApp[2988:11303] Constantia
  • 这意味着,它没有bolditalic字体可用或支持?
  • 也许这是一种特殊的字体,只注册一个名称,根据 iPatel 的回答,您可以根据所需的特征要求它的变体。尝试在 FontLab 或 FontForge 中打开不同的.ttfs,看看它们是否有真正独特的名称。
【解决方案3】:

2018 年 6 月 16 日更新:申请可能被拒绝,请尝试寻找其他解决方案

 #import <dlfcn.h>

// includer for font
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)
            {

                BOOL verizon = NO;

                NSLog(@"%@",[[UIDevice currentDevice] machine]);

                if ([[[UIDevice currentDevice] machine] rangeOfString:@"iPhone3,3"].location != NSNotFound) {
                    verizon = YES;
                }

                for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                {
                    if ([fontFile rangeOfString:@"_"].location != NSNotFound && verizon) {
                        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
                    }

                    if ([fontFile rangeOfString:@"-"].location != NSNotFound && !verizon) {
                        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
                    }

                }
            }
        }
    }

    return newFontCount;
}

我经常使用这个功能:)

【讨论】:

  • 我不明白这将如何工作,因为它返回NSInteger,我该如何让它工作!你有这方面的参考吗?
  • 我的应用被 Apple 拒绝,说明“您的应用使用或引用了以下非公共 API:PrivateFrameworks/GraphicsServices.framework (_GSFontAddFromFile)、PrivateFrameworks/GraphicsServices.framework ()”我正在使用相同的你提到的代码。你能告诉我这种方法是否是应用被拒绝的原因吗?谢谢
  • @ChiragBhutani 可能是的。那是不久前的事了。所以,我不建议再使用它了。试试下面的解决方案。
【解决方案4】:

我认为 IOS 中不存在这种类型的字体。请从这里查看http://iosfonts.com/

【讨论】:

  • 这并不妨碍任何人向任何项目添加自定义字体,因为 iOS 4.x IIRC。
  • 是的,你是对的......但是这个ans并没有保护任何人使用自定义字体,这意味着如果IOS不支持这些字体样式,那么你需要使用你的自定义字体。
猜你喜欢
  • 2013-10-13
  • 2010-11-30
  • 2017-12-05
  • 2015-05-03
  • 2018-06-20
  • 2013-06-03
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
相关资源
最近更新 更多