iOS 8上的UINavigationBar自定义字体无法工作

7

我花了几个小时尝试在iOS 8上使用自定义字体作为导航栏标题。这在iOS 7上运行良好:

UIFont *font = [UIFont fontWithName:@"Gotham-Bold" size:12];
NSDictionary *textAttributes = @{ NSFontAttributeName: font };
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

但在iOS 8上,文本会直接消失。更改颜色或系统字体大小可以完美地工作,但尝试使用自定义字体则根本不起作用。有人对此有任何想法吗?
谢谢!
编辑
我创建了一个小项目,这样您就可以自己尝试: https://github.com/noquepoaqui/customHeaderFont 这些代码行位于MasterViewController的第30行。

你在哪里执行这段代码?更好的方法是使用UIAppearance代理并将其应用于整个应用程序。 - sha
我也尝试过使用[[UINavigationBar appearance] setTitleAttributes:textAttributes];,并且得到了相同的结果。 - Noquepoaqui
1
它是否与自定义字体有关?您可以尝试使用默认字体之一进行自定义吗? - sha
我尝试了使用Georgia字体,它可以正常工作。 - Noquepoaqui
2个回答

1
当您分配属性时,存在拼写错误:
应该是:
self.navigationController.navigationBar.titleTextAttributes

改成:

self.navigationController.navigationBar.TitleTextAttributes

如果这不能解决问题,您可以在AppDelegate的didFinishLoadingWithOptions中放置此代码来测试字体是否正确添加。这将打印出您应用程序中所有可用的字体。只需查看输出窗口并搜索您的字体名称(Gotham-Bold)。如果未列出,则可以通过拖放方式从项目中删除该字体,并再次添加它。请确保在弹出的对话框中选中您的应用程序旁边的“添加到目标”复选框。
//list all available fonts
for (NSString *family in [UIFont familyNames]) {
    NSLog(@"---------- %@ ----------", family.uppercaseString);
    NSArray *names = [UIFont fontNamesForFamilyName:family];
    for (NSString *font in names) NSLog(@"%@", font);
}

字体在列表中,我在应用程序的其他部分中使用它,但是我无法使其在导航栏标题上工作。 - Noquepoaqui
你能否创建一个只有一个navigationviewcontroller的示例项目并复制该问题?如果您的示例项目有相同的问题,您能否发布链接? - Hannes
我已经编辑了我的问题,并添加了一个链接到 GitHub 页面,其中包含示例项目。 - Noquepoaqui

0

我使用的.ttf字体不太好用。我安装了.otf版本,现在一切都很顺利。


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