Swift NSAttributedString和表情符号:我从未设置的范围似乎已设置
这是最奇怪的问题(XCode 10.2.1):Swift NSAttributedString和表情符号:我从未设置的范围似乎已设置,swift,nsattributedstring,emoji,Swift,Nsattributedstring,Emoji,这是最奇怪的问题(XCode 10.2.1): let a=“String with emoji显示问题发生在属性字符串的显示中。如果在UITextView中使用属性字符串,也会发生这种情况。但问题不会发生在UILabel中 如果为属性字符串指定字体,所有显示问题都会消失 添加: nsa.addAttributes([.font: UIFont.systemFont(ofSize: 16)], range: NSRange(location: 0, length: nsa.string.
let a=“String with emoji显示问题发生在属性字符串的显示中。如果在UITextView中使用属性字符串,也会发生这种情况。但问题不会发生在UILabel中
如果为属性字符串指定字体,所有显示问题都会消失
添加:
nsa.addAttributes([.font: UIFont.systemFont(ofSize: 16)],
range: NSRange(location: 0, length: nsa.string.utf16.count))
添加两个字符串后,所有问题都会消失。显然,您应该使用所需的任何字体
您应该始终对属性字符串应用字体,以便UI组件知道如何正确显示属性字符串的内容。以下是苹果的官方答案:
我们已确定这是您需要解决的问题
因为应用程序没有明确指定属性化字体
字符串,它依赖于字体回退系统
建议自启动后始终指定字体属性
文本系统的上下文性质可能会产生意外的结果
像这样
请告知我们是否通过更新为您解决了此问题
你的错误报告
这太可怕了。奇怪的是,即使您删除了对addAttributes
的调用,字符串显示也不正确。简单地附加这两个字符串是一个问题。在iOS模拟器中显示的UILabel中,结果在我看来是正确的,因此这似乎是Xcode游乐场的问题。如果您在属性字符串,很好。这只是属性字符串的游乐场显示中的一个问题。它发生在游乐场中的UITextView上。没有在模拟器中尝试过。即使它只是游乐场,我真的鼓励在bugreport.apple.com打开一个缺陷。游乐场应该正确显示。苹果已经非常清楚,包括在WWDC 2018视频中,您不应该依赖默认属性来实现预期的效果。当然,这可能会让人感到意外,也可能有点烦人,但rmaddy已经告诉了您答案,因此可能没有理由进行无缘无故的表情。您学到了一些有用的东西;这不是我们来这里的目的吗?使用utf16 i事实上,对于包含表情符号的字符串(因为“字符”的长度很奇怪),建议您使用它,谢谢您指出这一点!这个答案帮助我解决了NSAttributedStrings和emojis的问题。干杯