2010-09-24 14 views
1

j'ai un problème à propos de la police dans l'iphone/ipadiPhone/iPad: problème de police pour des langues non latines

Tout le monde sait UILabel ne peut pas faire du texte riche.

Je choisis étiquette frontale http://github.com/zynga/FontLabel/blob/master/README

Je suppose que ce fait est étiquette frontale quelque chose comme NSAttributedString et cadre de texte de base, et aussi, il est tout à fait faible. Mais de toute façon, j'ai un problème.

Si je veux afficher un texte en plusieurs langues, disons anglais + chinois, et donner à la chaîne entière une police de "ArialMT", alors tous les caractères chinois sont affichés comme de petits carrés.

J'ai essayé, si j'attribue la police "STHeitiTC-Light" au texte, aucun problème, chinois et anglais peuvent être affichés, parce que STHeitiTC-Light est une police chinoise dans l'iphone/ipad.

Je pense que FrontLabel ne peut pas sélectionner automatiquement la meilleure police pour le texte non-latin si la police donnée ne s'applique pas.

Si j'utilise UILabel et l'affecte comme "ArialMT", et qu'il affiche du texte chinois ou japonais, PAS de problème, non? Je suppose que Apple détecte la police pour une langue différente?

S'il vous plaît donnez-moi quelques indices comment puis-je résoudre ce problème si je veux utiliser FrontLabel?

Merci

Répondre

1

auteur de FontLabel ici.

Vous avez raison, FontLabel n'effectue pas de remplacement automatique des polices si le glyphe est introuvable dans la police sélectionnée. La mise en œuvre d'un tel comportement était en dehors de la portée du projet, car elle peut être assez complexe. UILabel effectue cela, car il utilise WebKit pour effectuer le rendu du texte et WebKit prend en charge le remplacement des polices. Je ne suis pas sûr si CoreText fournit ceci ou s'il se comporte comme FontLabel. Dans tous les cas, si vous avez besoin de plusieurs polices dans FontLabel, vous pouvez spécifier différentes polices pour différentes plages de votre ZAttributedString. Malheureusement, il n'y a pas de moyen facile de déterminer quelles plages sont nécessaires sans inspecter votre chaîne directement. Si vous savez que vous travaillez uniquement avec l'anglais et le chinois, vous pouvez parcourir les caractères de votre chaîne pour déterminer s'ils sont susceptibles d'être des caractères anglais ou chinois, et l'utiliser pour déterminer les plages auxquelles attribuer les polices. L'alternative serait d'apprendre à FontLabel comment effectuer le remplacement des polices, mais comme je l'ai déjà dit, c'est assez compliqué. Sinon, si vous êtes à l'aise avec la version 4.0 ou supérieure de l'iPhone, vous pouvez essayer d'utiliser CoreText. Comme je l'ai déjà dit, je ne suis pas sûr que cela fasse des retombées, mais cela mérite d'être étudié.

+0

Bonjour Kevin, merci de faire FontLabel. C'est une très bonne classe et très facile à utiliser. Malheureusement, je dois juste faire face à plusieurs langues. Je suis en train d'utiliser Three20, lourd mais fait le boulot. Merci pour votre explication. – Jack