[TextKit]为什么一些特殊字符会使汉字变细变小
[TextKit]Why some special characters could make Chinese characters thinner and smaller
这发生在 TextKit 上。但是用CoreText就一切正常了
Xcode的调试window中的富文本也有同样的问题
所以,这是TextKit的错误吗?除了用CoreText替换TextKit还有什么解决办法吗?
我试过了,CoreText和TextKit之间确实存在差异。 我猜想 是字体回退函数引起的。
比如我们有一个字符串“啦☜啦”,并设置了一个字体。如果给定的字体没有所有字符,通常会有一个后备字体列表,如:
English font
CJK font
Emoji font
Unicode font (support almost all the unicode character)
有两种方法可以找到后备字体。
- 从头开始查找
- 在给定的字体中查找'啦'
- 没找到,按顺序在后备字体中找到,在CJK字体中找到。
- 在给定字体中查找“☜”。
- 没找到,按顺序在后备字体中找到,在Unicode字体中找到。
- 在给定的字体中查找'啦'
- 没找到,按顺序在后备字体中找到,在CJK字体中找到。
- 从上一个中查找
- 在给定的字体中查找'啦'
- 没找到,按顺序在后备字体中找到,在CJK字体中找到。
- 在 CJK 字体中查找“☜”。
- 没找到,按顺序在后备字体中找到,在Unicode字体中找到。
- 在Unicode字体
中查找'啦'
- 找到。
所以如果TextKit使用第二种方式,两个'啦's may use different fonts because of the character '☜'。
为了解决这个问题,你可以使用属性字符串并给'☜'一个不同的字体大小来打破回退循环,然后第二个'啦'使用CJK字体。
这发生在 TextKit 上。但是用CoreText就一切正常了
Xcode的调试window中的富文本也有同样的问题
所以,这是TextKit的错误吗?除了用CoreText替换TextKit还有什么解决办法吗?
我试过了,CoreText和TextKit之间确实存在差异。 我猜想 是字体回退函数引起的。
比如我们有一个字符串“啦☜啦”,并设置了一个字体。如果给定的字体没有所有字符,通常会有一个后备字体列表,如:
English font
CJK font
Emoji font
Unicode font (support almost all the unicode character)
有两种方法可以找到后备字体。
- 从头开始查找
- 在给定的字体中查找'啦'
- 没找到,按顺序在后备字体中找到,在CJK字体中找到。
- 在给定字体中查找“☜”。
- 没找到,按顺序在后备字体中找到,在Unicode字体中找到。
- 在给定的字体中查找'啦'
- 没找到,按顺序在后备字体中找到,在CJK字体中找到。
- 从上一个中查找
- 在给定的字体中查找'啦'
- 没找到,按顺序在后备字体中找到,在CJK字体中找到。
- 在 CJK 字体中查找“☜”。
- 没找到,按顺序在后备字体中找到,在Unicode字体中找到。
- 在Unicode字体 中查找'啦'
- 找到。
所以如果TextKit使用第二种方式,两个'啦's may use different fonts because of the character '☜'。
为了解决这个问题,你可以使用属性字符串并给'☜'一个不同的字体大小来打破回退循环,然后第二个'啦'使用CJK字体。