0
votes

Comment définir une police personnalisée avec une police régulière et en gras lors de la définition de la chaîne HTML sur l'étiquette à Swift 4?

Je reçois html chaîne formatée de API 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.

J'ai utilisé une extension permettant de convertir la chaîne HTML à 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 HTML et régulier sur régulier Html partie / balise. xxx

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 string?


0 commentaires

3 Réponses :


0
votes

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))


1 commentaires

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



0
votes

supposons que votre chaîne après analyse HTML String est la suivante: "Ceci est votre chaîne HTML" CODE>

pour créer un fichier 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


4 commentaires

Y a-t-il un moyen de calculer la plage de à dans la chaîne? et appliquer la logique ci-dessus


La chaîne contient-elle une seule instance de et ?


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.



1
votes

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
}
}


1 commentaires

ça a marché!!! merci tellement là-bas. Il faisait une erreur, je viens de le modifier, approuve