带有表情符号的NSAttributedString结束时未格式化

时间:2015-06-26 20:00:08

标签: ios swift uilabel nsattributedstring nsmutableattributedstring

我的NSAttributedString内容中包含表情符号的结尾未被格式化。我正在尝试格式化整个字符串(在此示例中将文本颜色设置为白色,以简化),但是当放入UILabel时,某些文本保持未格式化。

enter image description here

目前,我正在使用

let attributedString = NSMutableAttributedString(string: contents)

attributedString.addAttribute(
    NSForegroundColorAttributeName,
    value: UIColor.white,
    range: NSMakeRange(0, contents.characters.count)
)

label.attributedText = attributedString

我也尝试使用contents.utf8.count来获取长度,但得到相同的结果。

我注意到无格式字符的数量与字符串中表情符号的数量相同。这可能与正在发生的事情有关吗?

1 个答案:

答案 0 :(得分:17)

String.characters.count返回字符串中呈现字符的数量。一些表情符号(例如标志和种族特定的表情符号)是两个或多个UTF字符的组合,这些字符被渲染为一个字符,以便允许更多的表情符号。

UTF代表 Unicode转换格式,或简称为Unicode。它允许计算机,手机,平板电脑和其他所有电子设备使用相同的标准化字符集。

实现它的人可以选择如何呈现文本,但设备使用标准化字符集进行通信非常重要。否则,向某人发送消息“Hello,World”可能会显示为“Ifmmp,Xpsme”

要获取NSMakeRange中使用的字符串的实际长度,请使用NSAttributedString.lengthInt("\(contents.endIndex)")

所以,代码看起来应该是这样的

let attributedString = NSMutableAttributedString(string: contents)

attributedString.addAttribute(
    NSForegroundColorAttributeName,
    value: UIColor.white,
    range: NSMakeRange(0, attributedString.length)
)

label.attributedText = attributedString

这将生成格式正确的文本

enter image description here