Je reçois J'ai utilisé une extension permettant de convertir la chaîne Je veux mettre audacieux et régulier au texte, mais comme je n'ai défini qu'une police, je n'ai pas pu obtenir le résultat , Y a-t-il un moyen de définir la police audacieuse et régulière comme dans html code> chaîne formatée de
API code> réponse, donc j'ai besoin de la définir sur une étiquette tout en maintenant la police personnalisée (à partir de mon application) et en appliquant également un style (gras, régulier, etc.) à l'étiquette.
HTML code> à la chaîne ordinaire avec des lignes neuves, etc. Mais, j'ai pu définir la police Ici, mais seulement une police et cela montre uniquement dans la police régulière uniquement, l'ensemble de l'étiquette est donc dans une police, ce que je veux, c'est de définir des polices audacieuses dans la partie HTML code> HTML code> et régulier sur régulier
Html code> partie / balise. P>
html code> string? p> p>
3 Réponses :
L'application de styles audacieux et d'autres styles différents au texte peut être effectué en dessous de la méthode ci-dessous.
let sampleInput = "This is a test message" let boldtext = "test" let output = sampleInput.attributedString(with: [.font: UIFont.systemFont(ofSize: 12.0, weight: .regular)], and: boldtext, with: UIFont.systemFont(ofSize: 12.0, weight: .bold))
Désolé, mais cela n'aide pas, je ne sais pas quel est le texte en gras, je n'ai qu'une seule chaîne qui contient des balises audacieuses et un texte régulier
supposons que votre chaîne après analyse HTML String est la suivante: pour créer un fichier "Ceci est votre chaîne HTML" CODE>
attribué p> p>
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
Y a-t-il un moyen de calculer la plage de à b> dans la chaîne? et appliquer la logique ci-dessus
La chaîne contient-elle une seule instance de et B>?
Non, il peut contenir de nombreuses balises , merci beaucoup pour la mise à jour
Mise à jour du code pour plusieurs instances. Essayez-vous d'essayer si cela fonctionne bien.
Cela devrait aider:
extension String { func attributedString(withRegularFont regularFont: UIFont, andBoldFont boldFont: UIFont) -> NSMutableAttributedString { var attributedString = NSMutableAttributedString() guard let data = self.data(using: .utf8) else { return NSMutableAttributedString() } do { attributedString = try NSMutableAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding:String.Encoding.utf8.rawValue], documentAttributes: nil) let range = NSRange(location: 0, length: attributedString.length) attributedString.enumerateAttribute(NSAttributedString.Key.font, in: range, options: .longestEffectiveRangeNotRequired) { value, range, _ in let currentFont: UIFont = value as! UIFont var replacementFont: UIFont? = nil if currentFont.fontName.contains("bold") || currentFont.fontName.contains("Bold") { replacementFont = boldFont } else { replacementFont = regularFont } let replacementAttribute = [NSAttributedString.Key.font:replacementFont!] attributedString.addAttributes(replacementAttribute, range: range) } } catch let e { print(e.localizedDescription) } return attributedString } }
ça a marché!!! merci tellement là-bas. Il faisait une erreur, je viens de le modifier, approuve