2010-09-24 47 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