UIFontDescriptor找不到iOS字体

wb1gzix0  于 2022-12-30  发布在  iOS
关注(0)|答案(1)|浏览(132)

bounty已结束。回答此问题可获得+50声望奖励。奖励宽限期将在11小时后结束。Nathanael希望引起更多人关注此问题。

我尝试在NSAttributedString w/ UIFontDescriptor上使用Avenir Next。它是一种内置的iOS字体。它可以在我的SwiftUI组件中工作,但如果我尝试创建自定义UIFontDescriptor,它找不到字体并默认为SFUI。为什么会出现这种情况?如何修复?

// descriptor shows font as SFUI
let boldDescriptor = UIFontDescriptor(fontAttributes: [
    UIFontDescriptor.AttributeName.family: "Avenir Next",
    UIFontDescriptor.AttributeName.traits: [
        UIFontDescriptor.TraitKey.weight: UIFont.Weight.bold
    ]
])
hi3rlvi2

hi3rlvi21#

我不知道,你是如何使用这个描述符的方法.
Avenir Next是一种内置iOS字体,但并非所有设备都提供该字体。请确保在测试设备上安装了该字体。
通过使用UIFont.fontNames(forFamilyName: "Avenir Next")方法获取Avenir Next系列的可用字体名称列表,检查font是否可用。

var fonts: String = UIFont.fontNames(forFamilyName: "Avenir Next")
print(fonts) // ["AvenirNext-Regular", "AvenirNext-Italic", "AvenirNext-UltraLight", "AvenirNext-UltraLightItalic", "AvenirNext-Medium", "AvenirNext-MediumItalic", "AvenirNext-DemiBold", "AvenirNext-DemiBoldItalic", "AvenirNext-Bold", "AvenirNext-BoldItalic", "AvenirNext-Heavy", "AvenirNext-HeavyItalic"]

我还为boldDescriptor方法创建了一个新项目&它在我的情况下工作得很好。
使用这个项目Demo Project for UIFontDescriptor - GitHub &让我知道如果这个例子不适合你。
输出:
Output Screenshot
此外,您还可以将字体从系统导入到项目中。
还请检查以下原因:

  • 确保您的系统是最新的,因为许多Catalina用户都遇到过这个问题。
  • 确保您使用的是iOS 13或更高版本来测试字体。Note on official website
  • 确保所需字体在字体册. Search by Font BookSearch by folder中可用。
  • 字体不太可能自己"停止工作"。更有可能的是,操作系统升级出现了问题,或者字体数据库和缓存在升级过程中被损坏。同样重要的是,一次只在Mac上安装一个字体管理器,因为使用多个字体管理器可能会导致冲突并损坏基础字体数据库和缓存。如果您遇到字体无法正常工作的问题,你可能需要到尝试修复或重建这字体数据库和缓存.
  • 您应该能够解决系统中任何可用的重复字体,并确保仅安装和激活必要的字体。Resolve Duplicates

相关问题