自定义字体在iOS Today小部件中始终返回nil

11
我正在尝试将自定义字体添加到我的Today扩展程序中,但UIFont始终返回nil
步骤:
  1. 我已将字体文件添加到Today Widget目标中:

enter image description here

我检查字体文件是否在今日小部件包中:
  • enter image description here

    我将在Today Widget的TodayViewController中初始化字体实例,但它总是返回nil:
    - (void)viewDidLoad {
        [super viewDidLoad];
        UIFont* ft = [UIFont fontWithName:@"octicons-local" size:20];
    }
    

    enter image description here

    我在我的主项目中使用相同的方法,可以得到自定义字体。怎样才能解决这个问题?

    5个回答

    21

    也许是因为您在.plist文件中忘记添加关键字。

    在一个新行中添加关键字Fonts provided by application。 为您添加的每个字体添加项目。


    我认为在项目的新版本中不需要添加这个键,但是我错了。谢谢。 - wj2061
    1
    太好了!你解决了你的问题 :) 欢迎@wj2061 - Ronak Chaniyara

    1
    我曾经遇到过同样的问题,我的解决方法是在plist键Fonts provided by application下添加包括文件扩展名在内的完整文件名。enter image description here

    1

    我也遇到了这个问题,我将字体定位到我的目标并将应用程序提供的字体放入 plist 中。但是当我尝试检索字体时仍然得到 nil。

    可能是因为你使用的字体名称不正确。

    例如 (我也遇到的问题)

    我在项目中拖入的字体名称是trenolt.otf

    但是使用此名称UIFont(name: "trenolt", size: 14)得到 nil

    根据通过开发人员文档向应用程序添加自定义字体的说明,我打印出所有字体系列和名称

    for family in UIFont.familyNames.sorted() {
      let names = UIFont.fontNames(forFamilyName: family)
      print("Family: \(family) Font names: \(names)")
    }
    

    然后我在控制台中得到

    ["TruenoLt", "TruenoRg"]
    

    现在使用打印的名称

    UIFont(name: "TruenoLt", size: 14)
    

    获取

    <UICTFont: 0x7fbc39a168b0> font-family: "Trueno"; font-weight: normal; font-style: normal; font-size: 14.00pt
    

    0
    我曾经遇到过同样的问题,通过安装字体解决了。以下是具体步骤:
    从项目导航器中右键点击.otf文件 -> 点击“在Finder中显示” -> 在Finder窗口中双击字体,你会看到右下角有一个“安装”按钮,点击安装后检查你的应用程序即可。

    希望这个方法能够解决你的问题。


    0
    我在开发应用程序扩展时遇到了相同的问题。这里的一些答案帮助我解决了它,但我想要更清楚地表述,以便其他面临同样问题的开发人员能够更容易地解决:

    尽管字体在应用程序中正常工作,但在扩展程序中却不行,这会导致崩溃。

    UIFont(name: name.rawValue, size: size)
    

    返回了nil

    字体在应用程序本身的Info.plist文件中,但不在应用程序扩展的Info.plist中。因此,我不得不手动向扩展的Info.plist添加一行,键为Fonts provided by application,并输入应用程序Info.plist文件中的所有字体,直到它们匹配。然后它就对我起作用了。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接