这是最奇怪的问题(XCode 10.2.1运动场):
let a = "String with emoji "
var b = "00:00 0000"
var nsa = NSMutableAttributedString(string: a)
var nsb = NSMutableAttributedString(string: b)
nsb.addAttributes([.foregroundColor: UIColor.red],
range: NSRange(location: 0, length: nsb.length))
nsa.append(nsb)
和nsa
看起来像这样:
表情符号后的00
具有与表情符号字符相同的宽度和高度。但这变得奇怪了。该效果仅扩展到数字0-9,空格和井号(#)字符。如果我将00:00 0000
替换为其他字符串,那么一切都将完全正常:
似乎内部NSMutableAttributedString
将属性应用于表情符号字符,然后错误地将其扩展到由某些字符组成的附加字符串的前缀。
这是一个已知问题吗?通过在第一个字符串a + "\u{2009}"
后面加上一个不间断的细空格字符,我找到了一种解决方法。在Swift中,有没有更好的方法来处理表情符号怪异现象?
答案 0 :(得分:0)
显示问题发生在属性字符串的运动场显示中。如果在UITextView中使用属性字符串,也会发生这种情况。但是问题不会在UILabel中发生。
如果为属性字符串提供字体,所有显示问题都会消失。
添加:
nsa.addAttributes([.font: UIFont.systemFont(ofSize: 16)],
range: NSRange(location: 0, length: nsa.string.utf16.count))
附加两个字符串后的使所有问题都消失了。显然,您应该使用任何想要的字体。
您应该始终将字体应用于属性字符串,以便UI组件知道如何正确显示属性字符串的内容。
答案 1 :(得分:-1)
这是苹果公司的官方答案:
我们确定这是您需要解决的问题。
由于应用未明确指定属性的字体 字符串,这取决于字体后备系统。
建议自从 文本系统的上下文性质可能会产生意外结果 这样。
请通过更新告知我们是否为您解决了该问题 您的错误报告。
这真是令人震惊。