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

发布于 2024-09-24 22:16:22 字数 651 浏览 1 评论 0原文

我对 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,请给我一些线索如何解决这个问题?

谢谢

I have a problem about the font in iphone/ipad

Everyone knows UILabel can't do rich text.

So I choose FrontLabel http://github.com/zynga/FontLabel/blob/master/README

I guess what FrontLabel is doing is something like NSAttributedString and core text framework, and also, it is quite low level. But anyway, I have a problem.

If I want to display a mixed language text, let's say English + Chinese, and give the whole string a font of "ArialMT", then all Chinese characters are displayed like small squares.

I have tried, if I assign "STHeitiTC-Light" font to the text, no problem, both Chinese and English can be displayed, because STHeitiTC-Light is a Chinese font in iphone/ipad.

I think FrontLabel can't automatically select best font for non-latin text if the given font does not apply.

If I use UILabel and assign it as "ArialMT", and let it display text of Chinese or Japanese, NO problem, right? I guess apple is detecting font for different language?

Please give me some clues how can I solve this problem if I want to use FrontLabel?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

满意归宿 2024-10-01 22:16:22

FontLabel 的作者在这里。

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

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

author of FontLabel here.

You're right, FontLabel does not do automatic font fallback if the glyph cannot be found in the selected font. Implementing such a behavior was outside the scope of the project, as it can be quite complex. UILabel does perform this, as it uses WebKit to do the actual text rendering and WebKit supports font fallback. I am unsure if CoreText provides this or if it behaves like FontLabel. In any case, if you need multiple fonts in FontLabel, you can specify different fonts for different ranges of your ZAttributedString. Unfortunately there's no easy way to determine which ranges are necessary without inspecting your string directly. If you know you're only working with English and Chinese, you could iterate over the characters in your string to determine if they're likely to be english or chinese characters, and use that to determine which ranges to assign fonts to. The alternative would be to teach FontLabel how to perform font fallback, but as I said before, that's quite complicated.

Alternatively, if you're comfortable require 4.0 or above on iPhone, you can try using CoreText. As I said before, I'm unsure if it does font fallback, but it's worth investigating.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文