Это самая странная проблема (игровая площадка 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?