我的NSAttributedString
内容中包含表情符号的结尾未被格式化。我正在尝试格式化整个字符串(在此示例中将文本颜色设置为白色,以简化),但是当放入UILabel
时,某些文本保持未格式化。
目前,我正在使用
let attributedString = NSMutableAttributedString(string: contents)
attributedString.addAttribute(
NSForegroundColorAttributeName,
value: UIColor.white,
range: NSMakeRange(0, contents.characters.count)
)
label.attributedText = attributedString
我也尝试使用contents.utf8.count
来获取长度,但得到相同的结果。
我注意到无格式字符的数量与字符串中表情符号的数量相同。这可能与正在发生的事情有关吗?
答案 0 :(得分:17)
String.characters.count
返回字符串中呈现字符的数量。一些表情符号(例如标志和种族特定的表情符号)是两个或多个UTF字符的组合,这些字符被渲染为一个字符,以便允许更多的表情符号。
UTF
代表 Unicode转换格式,或简称为Unicode。它允许计算机,手机,平板电脑和其他所有电子设备使用相同的标准化字符集。
实现它的人可以选择如何呈现文本,但设备使用标准化字符集进行通信非常重要。否则,向某人发送消息“Hello,World”可能会显示为“Ifmmp,Xpsme”
要获取NSMakeRange
中使用的字符串的实际长度,请使用NSAttributedString.length
或Int("\(contents.endIndex)")
。
所以,代码看起来应该是这样的
let attributedString = NSMutableAttributedString(string: contents)
attributedString.addAttribute(
NSForegroundColorAttributeName,
value: UIColor.white,
range: NSMakeRange(0, attributedString.length)
)
label.attributedText = attributedString
这将生成格式正确的文本