iOS 13 已安装字体检索

And*_*ang 1 objective-c core-foundation ios

有没有办法在 iPadOS 13.1 中检索已安装字体的列表?

两者都不

CTFontManagerCopyAvailablePostScriptNames

也不

[UIFont familyNames]

将获得 iPad 设置 > 常规 > 字体中显示的任何字体。有什么我想念的吗?

And*_*ang 6

起初我以为你可以使用CTFontManagerCopyRegisteredFontDescriptorskCTFontManagerScopePersistent 范围,但它总是返回一个带有 0 个项目的 CFArrayRef。我猜如果你自己不安装它,你就看不到它。

所以我发现 iPadOS 13 中禁止枚举用户自定义字体。出于隐私考虑,枚举只会返回系统字体。请参阅时间戳 18:05 的字体管理和文本缩放 WWDC 视频

获得这些字体的唯一方法是使用UIFontPickerViewController为您的字体选择器提供的类进行有限的自定义。

  • 有时,苹果“对隐私的担忧”确实会导致重要功能的缺失。了解用户安装的字体会如何损害某人的隐私?为什么这是 iOS 中的问题,而不是 macOS 中的问题?使用 UIFontPickerViewController 选择用户安装的字体是一个混乱的解决方案,因为所有系统提供的字体也会显示。 (2认同)

小智 5

我想添加到您当前的答案中,即要通过UIFontPickerViewController必须将字体特权权限添加到您的项目目标来访问自定义用户安装的字体。

它可以在Project > Select your app target > Signing & Capabilities > + Capability 中完成,或者只是将其添加到您的.entitlements文件中。

权利 - 字体特权