Я пытаюсь подчеркнуть часть строки, например, 'строковую' часть в 'тестовой строковой строке '. Я использую NSMutableAttributedString
и мое решение работало хорошо над iOS7
.
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]
initWithString:@"test string"];
[attributedString addAttribute:NSUnderlineStyleAttributeName
value:@(NSUnderlineStyleSingle)
range:NSMakeRange(5, 6)];
myLabel.attributedText = attributedString;
Проблема состоит в том, что мое решение не работает в iOS8
больше. После пребывания в течение часа при тестировании нескольких вариантов NSMutableAttributedString
, Я узнал, что это решение работает только, когда диапазон запускается с 0 (длина может отличаться). Какова причина этого? Как может я обходное решение это?
версия 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)