2017-08-28 62 views
-1

发生在TextKit上。但是当我使用CoreText时,一切都是正确的。[TextKit]为什么一些特殊字符可以使汉字更薄更小

RichText with TextKit

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

enter image description here

那么,是不是TextKit的错误?除了CoreText取代TextKit之外,还有其他解决方案吗?

+0

某些特殊的unicode字符会导致此问题,例如♬,☜ – Swain

+0

我在您发布的图片中看不到一个特殊字符。 –

+0

@ElTomato☜是案件中的特殊角色。 before前的字符“啦啦啦啦”正确显示,但after后的字符显示异常。 – Swain

回答

0

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

例如,我们有一个字符串“啦☜啦”,并设置了一个字体。如果给定字体不具备的所有字符,通常会有后备字体列表,如:

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

有两种方法可以找到一个备用字体。

  1. 在给定的字体查找开始
    • 查找 '啦'。
    • 未找到,请按顺序在后备字体中查找,在CJK字体中找到。
    • 在给定字体中查找'☜'。
    • 未找到,请按顺序在后备字体中查找,在Unicode字体中找到。
    • 在给定的字体中找到'啦'。
    • 未找到,请按顺序在后备字体中查找,在CJK字体中找到。从以前的
      • 在给定的字体查找 '啦'
    • 查找。
    • 未找到,请按顺序在后备字体中查找,在CJK字体中找到。
    • CJK字体中查找'☜'。
    • 未找到,请按顺序在后备字体中查找,在Unicode字体中找到。
    • 中找到'啦'Unicode字体
    • 找到了。

所以如果TextKit使用第二种方式,两个人啦的可以使用,因为该字符的不同字体“☜”。

为了解决这个问题,你可以使用属性字符串并给'☜'一个不同的字体大小来打破回退循环,然后第二个'啦'使用CJK字体。

相关问题