【问题标题】:Custom font showing up in IB but not on device自定义字体显示在 IB 中但不在设备上
【发布时间】:2023-03-04 08:09:05
【问题描述】:

我正在尝试使用 Open Sans 系列中的字体。我将字体添加到我的 Xcode 项目中,检查它们是否已添加到我的应用程序的资源包中,并将字体添加到我的 Info.plist 文件中。

当我在 Interface Builder 中编辑 XIB 时,在字体下拉菜单中选择自定义时,我可以在 UILabels 上使用 Open Sans 字体。字体在 Interface Builder 的预览中正确呈现,但是当我在设备上启动应用程序时,字体未应用于标签。

我尝试以编程方式设置字体,但这也不起作用。而且我没有收到任何警告或错误。

我忘记了什么可以使用自定义字体?

运行 iOS7 的 iPad Air 和运行 iOS8 的 iPhone 6 上的行为是相同的。

【问题讨论】:

  • 也许这是本地化问题?您的自定义字体是否支持您正在运行的所有语言?
  • @Azat 怎么样?另外,现在是法语和英语。
  • 我在尝试使用一些自定义字体时遇到了同样的情况。英语还可以,但在我的母语中,它就像默认语言一样
  • 遇到同样的问题:/ 也做了大家建议的所有常规步骤......
  • @AbbasAngouti 遗憾的是不是,那是不久前的事了,从那以后我就放弃了那个字体。

标签: ios objective-c fonts


【解决方案1】:

如果您使用的是 webfont,请下载.ttf 文件并将其放入您的项目中。勾选如果需要复制项目

接下来在 info plist 上添加这个

 <key>UIAppFonts</key>
    <array>
        <string>Your fontname.ttf</string>
        <string>Bakersfield Bold.ttf</string>
   </array>

现在看看字体系列名称。您还可以在字体文件中找到它。从你下载的地方你也可以到达那里。就像我添加的字体,ttf 文件名是:Bakersfield Bold.ttf 这个字体名是:Bakersfield-Bold 这就是快乐的编码。

【讨论】:

    【解决方案2】:

    我只是遇到了同样的问题......仍然有......我想在同一个标​​签中混合字体,但没有用...... 解决方法是我尝试在标签的 IB 属性检查器中进行更改尝试将 Text 下拉菜单从 Attributed 更改为 Plain...字体在设备中确实发生了变化...所以我认为这是 Xcode 中的错误。

    【讨论】:

      【解决方案3】:

      转到 Target -> Build Phases -> Copy Bundle Resources ,在那里检查字体文件是否存在,如果没有,请按加号按钮并手动添加。有时字体文件不会自动添加到捆绑资源中。

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        对我有用的是当我添加字体以检查我的应用名称前面的“添加到目标”厚。

        在此处查看图片示例:

        【讨论】:

        • 你能提供更多细节吗?
        • 嘿,我编辑了我的答案,即当您将字体添加到应用程序时提示您的对话框
        【解决方案5】:

        只需确保捆绑包中的所有字体确实可用,尝试打印所有字体并检查您是否使用了正确的名称。 您可以在应用程序委托的 didFinishLaunchingWithOptions 方法中使用以下代码轻松完成此操作:

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

        或在 Swift 中:

        if let familyNames = UIFont.familyNames() as? [String] {
            for familyName in familyNames {
                println("Family : " + familyName)
                if let fontNames = UIFont.fontNamesForFamilyName(familyName) as? [String] {
                    for fontName in fontNames {
                        println("\tFont : " + fontName)
                    }
                }
            }
        }
        

        swift 代码不是最有效的,但应该可以检查字体是否存在于包中。

        【讨论】:

          【解决方案6】:

          您是否将字体添加到您的 info.plist 中,包含其文件扩展名,字体的拼写方式是否准确?例如,OpenSans.ttf 与 opensans.ttf 或只是 opensans 不同。要 100% 确定文件名,请右键单击您的字体文件,单击获取信息,然后检查全名描述。 要以编程方式添加字体,请关闭文件扩展名。例如,

          myLabel.font = [UIFont fontWithName:@"OpenSans" size:32];
          

          【讨论】:

          • 做了所有这些,没有任何改变。
          • 您是否尝试过从设备/模拟器中删除应用程序,清理项目,然后重新安装?
          【解决方案7】:

          确保您已在 Info.plist 中添加字体。有一个名为“应用程序提供的字体”的条目,其中必须包含您要使用的所有字体文件。

          【讨论】:

          • 对不起,我忘了提,但已经完成了。所以这显然不是。
          • 如果字体显示在 Interface Builder 中,它们显然是有效的字体。你确定字体没有在你的代码中被覆盖到你不期望的地方吗?我们可以看看你正在使用的代码吗?
          猜你喜欢
          • 2015-09-10
          • 2013-03-26
          • 1970-01-01
          • 2012-04-20
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多