【问题标题】:How to set UILabel to use Arial Narrow (programmatically) just like we do on storyboard?如何设置 UILabel 以使用 Arial Narrow(以编程方式),就像我们在情节提要上所做的那样?
【发布时间】:2013-10-15 12:49:57
【问题描述】:

当我们在 Storyboards 上设计 UILabel 时,我们可以将它们设置为 Attributed text,并且可以设置 Arial Narrow 字体。但是当我们使用上面的代码时以编程方式:

   NSRange auxRange = NSMakeRange(0, [myString length]);
   NSMutableAttributedString *attrStr = [myLabel.attributedText mutableCopy];
   UIFont *newFont = [UIFont fontWithName:@"Arial Narrow" size:17];
   [attrStr addAttributes:@{ NSFontAttributeName : newFont } range:auxRange];
   myLabel.attributedText = attrStr;

newFont 有一个指向 nil 的指针,这是因为编译器找不到 Arial Narrow 作为字体名称。

我的问题是,为什么我们可以在 Storyboard 上设置 Arial Narrow 而我们不能在代码上做同样的事情? 如果可能,我做错了什么?

【问题讨论】:

  • 不是编译器找不到字体。

标签: iphone ios objective-c fonts uilabel


【解决方案1】:

如果在尝试@Antonio MG 的回答后您没有看到您想要的字体,您必须自己提供该字体。

首先,找到*.ttf 字体文件并将其添加到您的应用程序包中

其次,将文件名添加到应用程序提供的字体列表中:

然后

编辑:只是为了完整性。以下是获取真实字体名称的方法:

  1. 打开字体册

  2. 找到你想要的字体

  3. 点击“信息”按钮

  4. 使用“PostScript 名称”下的名称

最后,您将能够以编程方式在应用程序中使用该字体。

希望这会有所帮助!

【讨论】:

  • 很好@LuisCien,我不知道如何在应用程序包上设置新的 ttf 字体。我完全按照您在答案中显示的方式进行操作,将 /Library/Fonts/Arial Narrow.ttf 拖到我在 xcode 上的项目中,设置提供的字体,但是当我运行应用程序时,编译器仍然在 UIFont *newFont = [UIFont fontWithName:@"Arial Narrow" size:17]; 上给我一个零指针。我可能忘记了什么?
  • 嗨@LuisCien,我终于知道出了什么问题。真正的字体名称是“PostScript Name”上显示的字体名称(参见字体册)。在我的情况下是 ArialNarrow 而不是 Arial Narrow。非常感谢。
  • 嗨@GabrielLopes,我刚看到你的回复。我很高兴我能提供帮助。干杯。
【解决方案2】:

Interface Builder 显示安装在 OS X 系统上的字体列表,而不是 iOS 上可用的字体。

顺便说一句,您为什么使用 Arial Narrow?看看 iOS 上的 HelveticaNeue-Light。

【讨论】:

  • 我需要设计为我交付的界面。 HelveticaNeue-Light 将成为我的风景,以防我无法弄清楚发生了什么。谢谢@Leo Natan。
  • Arial 字体需要许可证,如果没有许可证(合法),则不能将其打包到您的 IPA 中。此外,作为字体爱好者,设计师选择 Arial 是一种特殊的选择。也许是 Windows 设计师? :)
【解决方案3】:

我很惊讶 Storyboard 编辑器允许您选择 Arial Narrow。它不适合我。

在 iOS6 中,如果不使用自定义字体,Arial Narrow 将不可用。您可以在 iOS6 here 中找到可用的字体列表。正如WWDC session on using fonts with TextKit 中简要介绍的那样,iOS7 增加了对可下载字体的支持。这包括 Arial Narrow is available 的所有 OS X 字体。

因此,据我所知,要使用 Arial Narrow,您有多种选择,具体取决于您所针对的 iOS 版本。您可以将它与您的应用程序捆绑在一起(这将适用于 iOS6 和 iOS7),或者您可以编写代码以使用内置支持来下载和使用字体(这将需要 iOS7)。

【讨论】:

  • 谢谢@Andy Wilkinson,我会寻找一些关于支持下载的示例。
【解决方案4】:

打印你手机的字体列表:

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

然后检查要添加的字体的名称,它必须存在。

使用您看到的打印名称。

【讨论】:

  • 我同意,它可能只是 ArialNarrow 或 Arial_Narrow。
  • 这是我尝试的第一件事。不幸的是,当我们打印 NSLog 时,列表中没有 Arial Narrow。这很奇怪,因为在 Storyboard 上我们真的可以选择 Arial Narrow。
  • 这个答案的长版本是 [UIFont fontWithName:] 要求字体名称是字体的 PostScript 名称。您可以尝试在 Mac 上打开 Font Book,找到字体,然后按 cmd + i 来获取字体检查器。这将显示 PostScript 名称。
  • 我没有在我的故事板上看到 Arial Narrow :)
  • 有趣的@Antonio MG,也许我在 Storyboard 上有这个字体,因为我的 Mac 上安装了一些第三方软件。
猜你喜欢
  • 2021-12-23
  • 2019-06-08
  • 1970-01-01
  • 2015-09-25
  • 2018-05-30
  • 2012-03-13
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多