2017-08-28 76 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字體。

相關問題