Часть подчеркивания строкового использования NSMutableAttributedString в iOS 8 не работает

Я пытаюсь подчеркнуть часть строки, например, 'строковую' часть в 'тестовой строковой строке '. Я использую NSMutableAttributedString и мое решение работало хорошо над iOS7.

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]
        initWithString:@"test string"];
[attributedString addAttribute:NSUnderlineStyleAttributeName
                         value:@(NSUnderlineStyleSingle)
                         range:NSMakeRange(5, 6)];
myLabel.attributedText = attributedString;

Проблема состоит в том, что мое решение не работает в iOS8 больше. После пребывания в течение часа при тестировании нескольких вариантов NSMutableAttributedString, Я узнал, что это решение работает только, когда диапазон запускается с 0 (длина может отличаться). Какова причина этого? Как может я обходное решение это?

59
задан 10 May 2018 в 19:57

1 ответ

версия Swift 5 ответа @Joss с немногими модификациями, путем добавления возвращенного NSMutableAttributedString, потому что я не мог использовать исходное решение без него.

extension NSMutableAttributedString {

func underline(term: String) -> NSMutableAttributedString {
    guard let underlineRange = string.range(of: term) else {
        return NSMutableAttributedString()
    }
    let startPosition = string.distance(from: term.startIndex, to: underlineRange.lowerBound)
    let nsrange = NSRange(location: startPosition, length: term.count)
    addAttribute(
        .underlineStyle,
        value: NSUnderlineStyle.single.rawValue,
        range: nsrange)
     return self
}

}

Использование:

 let myUnderLinedText = "Hello World"
 let underLinedMutableString =  NSMutableAttributedString(string: myUnderLinedText, attributes: titleAttributes).underline(term: myUnderLinedText)
1
ответ дан 1 November 2019 в 11:26

Другие вопросы по тегам:

Похожие вопросы: