Как изменить шрифт в строке только для последних двух символов - PullRequest
0 голосов
/ 17 января 2020

У меня есть строка 0.1234. Чтобы найти последние два символа, я использую string.suffix (2), если я использую NSRange, чтобы найти этот диапазон в attributeString, он будет работать до тех пор, пока строка не будет иметь равные значения. если строка будет выглядеть как 1.1212, nsrange будет применен к первому найденному значению (в данном случае string.suffix (2) = 12), поэтому форматирование будет неправильным.

Как изменить шрифт только для двух последних символов.

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Вы можете использовать это расширение

extension String {
    func attributedStringWithColorSize( color: UIColor, size:CGFloat = 12) -> NSAttributedString {
        let attributedString = NSMutableAttributedString(string: self)


        if self.count < 3 {
            return attributedString
        }
            let range = NSRange(location: self.count-2, length: 2)
            attributedString.addAttribute(NSAttributedString.Key.font,value: UIFont.systemFont(ofSize: size) , range: range)
            attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)

        return attributedString
    }
}

Использовать вот так

@IBOutlet weak var lab: UILabel!
    override func viewDidLoad() {

        lab.attributedText = "1.1470".attributedStringWithColorSize(color: UIColor.red , size: 15)
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

enter image description here

0 голосов
/ 17 января 2020

Вы можете использовать String.Index метод

func index(_ i: String.Index, offsetBy n: String.IndexDistance, limitedBy limit: String.Index) -> String.Index?

на вашем string.endIndex с отрицательным смещением, равным двум и ограниченным вашим string.startIndex:


let string = "1.1212"
if let start = string.index(string.endIndex, offsetBy: -2, limitedBy: string.startIndex) {
    print(string[start..<string.endIndex])  // "12\n"
    // or using a partial range
    print(string[start...]) // "12\n"
}

Применение меньшего размера и цвета шрифта к нему с сохранением исходного шрифта метки:

Тестирование игровой площадки:

let string = "1.1212"
let label = UILabel(frame: .zero)
label.attributedText = NSAttributedString(string: string)

if let start = string.index(string.endIndex, offsetBy: -2, limitedBy: string.startIndex), let attrStr = label.attributedText {
    let mutableAttributedString = NSMutableAttributedString(attributedString: attrStr)
    mutableAttributedString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.red, NSAttributedString.Key.font: label.font.withSize(label.font.pointSize * 0.6)], range: .init(start..<string.endIndex, in: string))
    label.attributedText = mutableAttributedString
    label.sizeToFit()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...