Предположим, что ваша строка после разбора HTML-строки: "This is your HTML string"
Для создания attributed string
,
let attrStr = NSMutableAttributedString(string: "This is your HTML string")
Добавление атрибута UIFont
со значением System-Regular
,
attrStr.addAttribute(.font, value: UIFont.systemFont(ofSize: 14.0, weight: .regular), range: NSRange(location: 0, length: attrStr.length))
При добавлении attribute
к attributed string
нам необходимо указать range
из string
, в котором мы хотим отразить attribute
.
Поскольку нам нужно, чтобы у всего string
был шрифт Regular
, range
вычисляется как целое string
length
.
Теперь, добавив атрибут UIFont
со значением System-Bold
для части string
, скажем, мы делаем HTML
жирным шрифтом,
attrStr.addAttribute(.font, value: UIFont.systemFont(ofSize: 14.0, weight: .bold), range: (attrStr.string as NSString).range(of: "HTML"))
Мы вычислили range
слова HTML во всей строке.
Аналогично, вы можете добавить любой из attributes
к string
, давая соответствующие range
значения.
Выход: This is your
HTML
string
Edit-1:
Чтобы вычислить range
из <b> to </b>
, вам необходимо вычислить его вручную.
Пример:
let str = "This <b>is your HTML</b> string"
let range1 = (str as NSString).range(of: "<b>")
let range2 = (str as NSString).range(of: "</b>")
let requiredRange = NSRange(location: range1.location, length: range2.location + range2.length - range1.location)
Приведенный выше пример будет работатьk для одного экземпляра <b>/</b>
в string
.
Edit-2:
Когда string
включает несколько экземпляров <b>/</b>
:
let htmlStr = "This is an <b>HTML</b> parsed <b>string</b>"
let arr = htmlStr.components(separatedBy: "</b>")
let attrStr = NSMutableAttributedString()
for str in arr {
if !str.isEmpty {
let range1 = (str as NSString).range(of: "<b>")
let requiredRange = NSRange(location: range1.location, length: str.count - range1.location)
let formattedStr = NSMutableAttributedString(string: str)
formattedStr.addAttribute(.font, value: UIFont.systemFont(ofSize: 14.0, weight: .bold), range: requiredRange)
attrStr.append(formattedStr)
attrStr.append(NSAttributedString.init(string: "</b>", attributes: [.font : UIFont.systemFont(ofSize: 14.0, weight: .bold)]))
}
}
self.label.attributedText = attrStr
Выход: This is an
<b>HTML</b>
parsed
<b>string</b>