如何在 swift 中以自定义字体显示自定义字符从 0xFF01 到 0xFF71
How to display custom characters in custom font from 0xFF01 to 0xFF71 in swift
我使用以下 swift 代码在自定义 uifont 中显示特殊字符。然而;该代码适用于 iPhone 13 Pro Max 模拟器,但不适用于真实设备 iPhone 13 Pro Max。在模拟器上,特殊字符显示正确并显示特殊字符(0xFF01 到 0xFF71),但在设备上我得到不同的字符(如 P、D 等)。添加到 Xcode 的字体,即使我单步执行代码,我也可以看到使用 UIFont() 正确选择了特殊字体。
ch = 0xFF01
currentFont = UIFont(name: String(cString: fontNamePtr), size:CGFloat(fntSize))!
currentFontAttributes = [NSAttributedString.Key.font: currentFont]
let charStr = String(Character(UnicodeScalar(ch)!))
charStr.draw(at: CGPoint(x:CGFloat(x), y: CGFloat(y)), withAttributes: currentFontAttributes)
有什么想法吗?
当您的代码在模拟器中是 运行 时,它实际上是 Mac 上的 运行OS 并且可以访问桌面计算机上的所有字体。当它在 Phone 上是 运行 时,它只能访问 phone 上的字体。
在搜索特定代码序列的字形时,如果系统在当前字体中找不到字形,它可以参考“后备”字体链,看看是否有其他字体可以提供该字形.如果回退链中的某些内容有字形,系统可以绘制它。
您使用的字体可能没有字形用于字符串中的代码序列。当 运行 在 Mac 上 OS 时,在模拟器中,OS 能够找到提供字形的后备字体 - 并绘制它。
在 Phone 上,系统可能没有包含该字形的字体,或者它可能会找到与在 Mac 上找到的字体不同的字形OS,因此它不绘制任何内容,或“错误”的东西。
我使用以下 swift 代码在自定义 uifont 中显示特殊字符。然而;该代码适用于 iPhone 13 Pro Max 模拟器,但不适用于真实设备 iPhone 13 Pro Max。在模拟器上,特殊字符显示正确并显示特殊字符(0xFF01 到 0xFF71),但在设备上我得到不同的字符(如 P、D 等)。添加到 Xcode 的字体,即使我单步执行代码,我也可以看到使用 UIFont() 正确选择了特殊字体。
ch = 0xFF01
currentFont = UIFont(name: String(cString: fontNamePtr), size:CGFloat(fntSize))!
currentFontAttributes = [NSAttributedString.Key.font: currentFont]
let charStr = String(Character(UnicodeScalar(ch)!))
charStr.draw(at: CGPoint(x:CGFloat(x), y: CGFloat(y)), withAttributes: currentFontAttributes)
有什么想法吗?
当您的代码在模拟器中是 运行 时,它实际上是 Mac 上的 运行OS 并且可以访问桌面计算机上的所有字体。当它在 Phone 上是 运行 时,它只能访问 phone 上的字体。
在搜索特定代码序列的字形时,如果系统在当前字体中找不到字形,它可以参考“后备”字体链,看看是否有其他字体可以提供该字形.如果回退链中的某些内容有字形,系统可以绘制它。
您使用的字体可能没有字形用于字符串中的代码序列。当 运行 在 Mac 上 OS 时,在模拟器中,OS 能够找到提供字形的后备字体 - 并绘制它。
在 Phone 上,系统可能没有包含该字形的字体,或者它可能会找到与在 Mac 上找到的字体不同的字形OS,因此它不绘制任何内容,或“错误”的东西。