iOS15/16中NotoSansTelugu字体泰卢固语文本渲染异常求助
泰卢固语字体在iOS15/16首次启动时渲染异常问题
背景信息
- 应用已实现多语言支持,为不同语言配置对应字体:
- 印地语使用NotoSansDevanagari(功能正常)
- 泰卢固语使用NotoSansTelugu
- 已完成字体文件的完整配置:.ttf字体文件已正确添加至项目、Info.plist,且已加入Build Phase的Copy Bundle Resources中
相关代码配置
泰卢固语本地化文件内容
"newsletter" = "సమాచార పత్రిక(న్యూస్లెట్టర్)"; "darkMode" = "డార్క్ మోడ్";
语言选择存储逻辑
func saveSelectedLanguage() { for language in languages where selectedLanguage == language.languageText { UserDefaults.appLanguage = language.languageCode } }
语言管理与本地化字符串获取实现
class LanguageManager: LanguageProvider { func fetchValue(for key: Localize.Key) -> String { var savedAppLanuage = UserDefault.appLanguage let path = Bundle.main.path(forResource: savedAppLanuage, ofType: "lproj") let bundle = Bundle(path: path ?? "") return NSLocalizedString(key.rawValue, tableName: nil, bundle: bundle ?? Bundle.main, value: "", comment: "") } } /// 属性包装器:从本地化文件获取实际字符串 @propertyWrapper public struct LocalizedString { var key: Localize.Key let languageManager: LanguageProvider = LanguageManager() public var wrappedValue: String { languageManager.fetchValue(for: key) // NSLocalizedString(key.rawValue, tableName: nil, bundle: Bundle.main, value: "", comment: "") } }
应用字体枚举定义
enum AppFontName { case roboto case notoSansDevanagari case notoSansKannada case notoSansTelugu var value: String { switch self { case .roboto: return "Roboto-Regular" case .notoSansDevanagari: return "NotoSansDevanagari-Regular" case .notoSansKannada: return "NotoSansKannada-Regular" case .notoSansTelugu: return "NotoSansTelugu-Regular" } } }
问题现象
- 仅iOS15、iOS16版本存在异常:首次启动应用并选择泰卢固语后,UI渲染的文本显示异常,但控制台输出的本地化字符串是正确的;重启应用后,文本渲染恢复正常。
- iOS14、iOS17及以上版本无此问题。
- 已尝试重新添加、安装字体,问题未得到解决。
- 应用同时使用Swift和SwiftUI,开发环境为Xcode 15.0。
重现步骤
- 安装应用,选择泰卢固语并进入应用,跳转页面后检查文本显示状态;
- 强制关闭应用并重启,再次选择泰卢固语进入应用,可观察到部分文本渲染异常。
内容的提问来源于stack exchange,提问作者Swarna Pandey
相关产品推荐
相关产品推荐

