[TextKit]为什么一些特殊字符会使汉字变得越来越小

时间:2017-08-28 04:04:32

标签: ios objective-c textkit

这发生在TextKit上。但是当我使用CoreText时,一切都很好。

RichText with TextKit

Xcode调试窗口中的富文本也存在同样的问题。

enter image description here

那么,它是TextKit的错误吗?除了用CoreText替换TextKit还有什么解决方案吗?

1 个答案:

答案 0 :(得分:0)

我试过了,CoreText和TextKit之间确实存在差异。 我猜它是由字体回退函数引起的。

例如,我们有一个字符串"啦☜啦",并设置字体。如果给定的字体没有包含所有字符,通常会有一些后备字体列表,如:

English font
CJK font
Emoji font
Unicode font (support almost all the unicode character)

有两种方法可以找到后备字体。

  1. 从头开始查找
    • 查找'啦'用给定的字体。
    • 未找到,按顺序查找后备字体,以CJK字体找到。
    • 查找'☜'用给定的字体。
    • 未找到,按顺序查找后备字体,以Unicode字体找到。
    • 查找'啦'用给定的字体。
    • 未找到,按顺序查找后备字体,以CJK字体找到。
  2. 从以前找到
    • 查找'啦'用给定的字体。
    • 未找到,按顺序查找后备字体,以CJK字体找到。
    • 查找'☜'在 CJK字体
    • 未找到,按顺序查找后备字体,以Unicode字体找到。
    • 查找'啦'在 Unicode字体
    • 实测值。
  3. 因此,如果TextKit使用第二种方式,那么两个“啦”可能会使用不同的字体,因为字符是'☜'。

    要解决此问题,您可以使用属性字符串并提供'☜'一个不同的字体大小来打破后备循环,然后第二个'啦'使用CJK字体。