iPhone / iPad:非拉丁语言的字体问题

时间:2010-09-24 11:14:49

标签: iphone text fonts cjk

我对iphone / ipad中的字体有疑问

每个人都知道UILabel不能做富文本。

所以我选择FrontLabel http://github.com/zynga/FontLabel/blob/master/README

我猜FrontLabel正在做的事情就像NSAttributedString和核心文本框架一样,而且它的级别相当低。但无论如何,我有一个问题。

如果我想显示一个混合语言文本,让我们说英文+中文,并给整个字符串一个字体“ArialMT”,然后所有中文字符显示为小方块。

我试过,如果我将“STHeitiTC-Light”字体分配给文本,没问题,可以显示中文和英文,因为STHeitiTC-Light是iphone / ipad中的中文字体。

我认为如果给定的字体不适用,FrontLabel无法自动为非拉丁文本选择最佳字体。

如果我使用UILabel并将其指定为“ArialMT”,并让它显示中文或日文文本,没问题,对吧?我猜苹果正在检测不同语言的字体?

如果我想使用FrontLabel,请给我一些线索如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:1)

FontLabel的作者。

你是对的,如果在所选字体中找不到字形,FontLabel不会自动进行字体回退。实现这样的行为超出了项目的范围,因为它可能非常复杂。 UILabel执行此操作,因为它使用WebKit进行实际的文本呈现,而WebKit支持字体回退。我不确定CoreText是否提供此功能,或者它是否像FontLabel一样。在任何情况下,如果在FontLabel中需要多种字体,则可以为ZAttributedString的不同范围指定不同的字体。不幸的是,如果不直接检查字符串,就没有简单的方法来确定哪些范围是必要的。如果您知道自己只使用英语和中文,则可以迭代字符串中的字符以确定它们是否可能是英文或中文字符,并使用它来确定将字体分配给哪些范围。另一种方法是教FontLabel如何执行字体回退,但正如我之前所说,这非常复杂。

或者,如果您在iPhone上需要4.0或更高版本,则可以尝试使用CoreText。正如我之前所说,我不确定它是否会出现字体后退,但值得研究。