2010-09-24 37 views
1

我对iphone/ipad中的字体有问题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

FontLabel的作者在这里。

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

另外,如果你觉得在iPhone上需要4.0或更高版本,你可以尝试使用CoreText。正如我之前所说的,我不确定它是否会回退字体,但值得研究。

+0

你好凯文,感谢你制作FontLabel。这是一个非常好的班级,使用非常简单。不幸的是,我只需要处理多种语言。我现在正在使用Three20,很沉重但是做了这个工作。谢谢你的解释。 – Jack 2010-10-28 08:51:25