Как увеличить размер шрифта отдельных подстрок в UITextView? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь создать это представление в приложении для iPhone, которое создаю с помощью Swift 4.2

https://imgur.com/wCGfxrc

В настоящее время я создаю представление в виде изображения, и оноотображается в UIImageView.Однако я хотел бы увеличить размер конкретной подстроки в коде, чем при использовании изображений.Я не против использования фреймворков.

Я пытался использовать NSAttributedString, но это громоздкий процесс, определяющий его для каждой строки (таких строк более 12)

Редактировать:

Итак, я создал следующий класс в Swift 4.2, iOS 12 :

public class representations {

func plus1() -> [NSAttributedString.Key: Any]{
    let plus1: [NSAttributedString.Key: Any] = [
        .font: UIFont.boldSystemFont(ofSize: 30)
    ]
    return plus1
}

func plus2() -> [NSAttributedString.Key: Any]{
    let plus1: [NSAttributedString.Key: Any] = [
        .font: UIFont.boldSystemFont(ofSize: 33)
    ]
    return plus1
}

func minus1() -> [NSAttributedString.Key: Any]{
    let minus1: [NSAttributedString.Key: Any] = [
        .font: UIFont.boldSystemFont(ofSize: 18)
    ]
    return minus1
}

func minus2() -> [NSAttributedString.Key: Any]{
    let minus2: [NSAttributedString.Key: Any] = [
        .font: UIFont.boldSystemFont(ofSize: 16)
    ]
    return minus2
}

func boldify() -> [NSAttributedString.Key: Any]{
    let bold: [NSAttributedString.Key: Any] = [
        .font: UIFont.boldSystemFont(ofSize: 20)
    ]
    return bold
}

func correct() -> [NSAttributedString.Key: Any]{
    let correct: [NSAttributedString.Key: Any] = [
        .foregroundColor: UIColor.green
    ]
    return correct
}

func incorrect() -> [NSAttributedString.Key: Any]{
    let incorrect: [NSAttributedString.Key: Any] = [
        .foregroundColor: UIColor.red
    ]
    return incorrect
}


}

И вот как работает вызов функции:

for (innerKey,innerValue) in value["attributes"] as! [String: [String: [Int]]]{
    var i = 0
    let loc = innerValue["location"] as! [Int]
    let length = innerValue["length"] as! [Int]
    for location in loc {
    switch(innerKey){
         case "plus1" :
                    attributedString.addAttributes(rep.plus1(), range: NSRange(location: location-1, length: length[i]))
         case "plus2" :
                    attributedString.addAttributes(rep.plus2(), range: NSRange(location: location-1, length: length[i]))
         case "minus1" :
                    attributedString.addAttributes(rep.minus1(), range: NSRange(location: location-1, length: length[i]))
         case "minus2" :
                    attributedString.addAttributes(rep.minus2(), range: NSRange(location: location-1, length: length[i]))
         default:
                    print("default case")
        }
        i+=1

    }
}

Все данныегде добавить атрибуты хранятся в словаре:

        "attributes" : [
            "plus1" : [
                "location" : [32,34],
                "length" : [1,3]
            ],
            "plus2" : [
                "location" : [33],
                "length" : [1]
            ],
        ]

Это результат !

1 Ответ

1 голос
/ 04 апреля 2019

NSAttributedString действительно является единственным вариантом, так как этот формат может содержать несколько текстовых форматов.Вы можете написать скрипт, который «сканирует» определенные слова в вашем обычном тексте, затем для каждого символа обновите шрифт +1 размер, пока он не достигнет середины, затем снова уменьшите его, пока он снова не достигнет шрифта по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...