Использование NSMutableParagraphStyle вызывает проблему с Emojis - PullRequest
0 голосов
/ 10 мая 2018

В моем приложении я хочу изменить высоту строки, я использую это расширение строки:

extension String {
    func addLineHeightWith(alignement: NSTextAlignment) -> NSAttributedString {
        let attrString = NSMutableAttributedString(string: self)
        let style = NSMutableParagraphStyle()
        style.lineSpacing = 5
        style.minimumLineHeight = 5
        style.alignment = alignement
        attrString.addAttribute(NSAttributedStringKey.paragraphStyle, value: style, range: NSRange(location: 0, length: self.count))
        return attrString
    }
}

Я пытаюсь применить его в UILabel:

let str = "Hi%5E%5E%F0%9F%98%AC%F0%9F%98%AC%F0%9F%98%AC%F0%9F%98%AC%F0%9F%98%AC%F0%9F%98%AC%F0%9F%98%AC"

if let decoded = str.removingPercentEncoding {
     print(decoded)
     label.attributedText = decoded.addLineHeightWith(alignement: .center)
}

Вот результат в консоли:

enter image description here

И результат на экране:

enter image description here

Есть идеи? Спасибо

1 Ответ

0 голосов
/ 10 мая 2018

Проблема с использованием NSRange(location: 0, length: self.count).

self.count - правильное количество символов в Swift String. Но NSAttributedString основан на NSString и использовании символов в кодировке UTF-16. Вы применяете стиль только к половине реальной строки. Фактически, он разделяет одного из персонажей пополам.

Простое решение - получить длину строки как NSString.

Заменить:

NSRange(location: 0, length: self.count)

с:

NSRange(location: 0, length: (self as NSString).length))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...