NSRange с расположением на iOS13 не работает - PullRequest
0 голосов
/ 23 сентября 2019

Мой код не работает с местоположением NSRange на iOS13, на iOS12 и ниже, это работает.Есть ли способ раскрасить текст от букв, которые будут раскрашены до общего количества букв после этого?потому что у меня есть только данные, начиная с цветных букв и всего букв после.

 override func viewDidLoad() {
        super.viewDidLoad()

        let text = "Testing Attributed Strings"
        let attributedString = NSMutableAttributedString(string: text)
        let dataStartIHave = 0
        let dataTotalIHave = 7

        attributedString.addAttribute(.foregroundColor, value: UIColor.red, range: NSRange(location: dataStartIHave, length: dataTotalIHave))

        attributedLabel.attributedText = attributedString
    }

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Чтобы надежно получить диапазон от конца слова до конца текста, необходимо преобразовать NSRange в Range<String.Index> и обратно

let text = "Testing Attributed Strings"
let attributedString = NSMutableAttributedString(string: text)
let dataStartIHave = 0
let dataTotalIHave = 7
let wordRange = NSRange(location: dataStartIHave, length: dataTotalIHave)
let upperBound = Range(wordRange, in: text)!.upperBound
let upperRange = NSRange(upperBound..., in: text)

attributedString.addAttribute(.foregroundColor, value: UIColor.red, range: upperRange)
attributedLabel.attributedText = attributedString

В Swift более эффективно получитьRange<String.Index> от слова

let text = "Testing Attributed Strings"
let attributedString = NSMutableAttributedString(string: text)
if let testingRange = text.range(of: "Testing") {
    let upperRange = NSRange(testingRange.upperBound..., in: text)       
    attributedString.addAttribute(.foregroundColor, value: UIColor.red, range: upperRange)
}
attributedLabel.attributedText = attributedString
0 голосов
/ 23 сентября 2019

Это будет работать:

    attributedString.addAttribute(.foregroundColor, value: UIColor.red, range: NSRange(location: dataStartIHave, length: dataTotalIHave))
...