#swift #append #nsattributedstring
#быстрый #добавить #nsattributedstring
Вопрос:
Я пытаюсь добавить приписываемый текст в конец простого текста. Чтобы сделать это, я думаю, мне нужно сделать весь TextView.text атрибутивным, а затем установить TextView.attributedText = combination . Но когда я делаю это, весь текст в предыдущих строках приобретает меньший размер шрифта, я не понимаю, почему. Код приведен ниже:
let attributedString = NSMutableAttributedString(string: "nANS = " resultt "n")
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: textView.font!.pointSize), range: NSRange(location: 0, length: 6))
let combination = NSMutableAttributedString(string: textView.text)
combination.append(attributedString)
textView.attributedText = combination
Комментарии:
1.
let combination = NSMutableAttributedString(string: textView.text)
=>let combination = NSMutableAttributedString(attributedString: textView.attributedText)
. Поскольку вы воссоздавали aNSAttributedString
из aString
, но у aString
нет атрибутов для рендеринга, это просто простой список символов (для упрощения).
Ответ №1:
Вы потеряли приписываемые данные при создании combination
.
let attributedString = NSMutableAttributedString(string: "nANS = " resultt "n")
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: textView.font!.pointSize), range: NSRange(location: 0, length: 6))
// Pass the attributed string, not the plain one
let combination = NSMutableAttributedString(attributedString: textView.attributedText)
combination.append(attributedString)
textView.attributedText = combination
Комментарии:
1. спасибо, этот маленький трюк был тем, с чем я боролся 🙂
Ответ №2:
Создайте атрибуты
let textColor = [NSAttributedString.Key.foregroundColor: <#T##color: UIColor##UIColor#>]
let linkColor = [NSAttributedString.Key.foregroundColor: <#T##color: UIColor##UIColor#>]
let termsLinkAttributes = [NSAttributedString.Key.link: <#T##yourLink: String##String#>]
let policyLinkAttributes = [NSAttributedString.Key.link: <#T##yourLink: String##String#>]
Добавьте атрибуты к различным частям текста
let firstText = NSMutableAttributedString(string: <#T##yourText: String##String#> " ",
attributes: textColor)
let secondText = NSMutableAttributedString(string: <#T##yourText: String##String#> " ",
attributes: textColor)
let termsLink = NSMutableAttributedString(string: <#T##yourText: String##String#> " ",
attributes: termsLinkAttributes)
let policyLink = NSMutableAttributedString(string: <#T##yourText: String##String#> ".",
attributes: policyLinkAttributes)
let finalText = NSMutableAttributedString()
finalText.append(firstText)
finalText.append(termsLink)
finalText.append(secondText)
finalText.append(policyLink)
Примените его к вашему текстовому представлению
<#T##yourTextView: UITextView##UITextView#>.delegate = self
<#T##yourTextView: UITextView##UITextView#>.linkTextAttributes = linkColor
<#T##yourTextView: UITextView##UITextView#>.attributedText = finalText