J'essaie d'obtenir un extrait de texte formaté en html pour s'afficher correctement sur un iPhone dans un UITableViewCell.
Jusqu'à présent, j'ai ceci:
NSError* error;
NSString* source = @"<strong>Nice</strong> try, Phil";
NSMutableAttributedString* str = [[NSMutableAttributedString alloc] initWithData:[source dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
documentAttributes:nil error:&error];
Ce genre de travaux. J'obtiens un texte qui a «Nice» en gras! Mais ... cela définit également la police comme Times Roman! Ce n'est pas la police que je veux. Je pense que j'ai besoin de définir quelque chose dans le documentAttributes, mais je ne trouve aucun exemple nulle part.
Réponses:
Version Swift 2 , basée sur la réponse de Javier Querol
Swift 3.0 et iOS 9+
Swift 5 et iOS 11+
la source
font-family: '-apple-system', 'HelveticaNeue';
(ce qui fonctionne et est également rétrocompatible). Si vous ne supportez que iOS9font-family: -apple-system;
peut être utilisécolor: #000000
. Voir ce lien pour convertir UIColor en chaîne hexadécimale: gist.github.com/yannickl/16f0ed38f0698d9a8ae7De cette façon, vous n'avez pas besoin de spécifier la police de votre choix, elle prendra la police et la taille de l'étiquette.
la source
NSUnicodeStringEncoding
, puis vous encodez les données en caractères avecNSUTF8StringEncoding
. Est-ce que c'est bon?J'ai en fait trouvé une solution de travail à ce problème:
Changer la police de votre chaîne de réponse HTML avant qu'elle ne soit analysée.
Exemple:
Version Swift:
la source
Deviner. Un peu d'ours, et peut-être pas la meilleure réponse.
Ce code passera en revue toutes les modifications de police. Je sais qu'il utilise "Times New Roman" et "Times New Roman BoldMT" pour les polices. Mais peu importe, cela trouvera les polices en gras et me permettra de les réinitialiser. Je peux également réinitialiser la taille pendant que j'y suis.
J'espère / pense honnêtement qu'il existe un moyen de configurer cela au moment de l'analyse, mais je ne peux pas le trouver s'il y en a.
la source
Une approche plus générique consiste à examiner les traits de police lors de l'énumération et à créer une police avec les mêmes traits (gras, italique, etc.):
la source
Oui, il existe une solution plus simple. Définissez la police dans la source html!
J'espère que cela t'aides.
la source
Mise à jour Swift 4+ de l' extension UILabel
iOS 9+
la source
Les réponses avant tout fonctionnent bien si vous effectuez la conversion en même temps que la création du fichier
NSAttributedString
. Mais je pense qu'une meilleure solution, qui fonctionne sur la chaîne elle-même et n'a donc pas besoin d'accéder à l'entrée, est la catégorie suivante:Utilisé comme:
Fonctionne sur iOS 7+
la source
Amélioration de la solution Victor, y compris la couleur:
Pour que cela fonctionne, vous aurez également besoin de YLColor.swift de la conversion uicolor en hexadécimal https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7
la source
L'utilisation de NSHTMLTextDocumentType est lente et difficile à contrôler les styles. Je vous suggère d'essayer ma bibliothèque qui s'appelle Atributika. Il a son propre analyseur très rapide. Vous pouvez également avoir n'importe quel nom de balise et définir n'importe quel style pour eux.
Exemple:
Vous pouvez le trouver ici https://github.com/psharanda/Atributika
la source
En joignant les réponses de chacun, j'ai créé deux extensions qui permettent de définir une étiquette avec du texte html. Certaines réponses ci-dessus n'ont pas interprété correctement la famille de polices dans les chaînes attribuées. D'autres étaient incomplets pour mes besoins ou ont échoué d'une autre manière. Faites-moi savoir s'il y a quelque chose que vous aimeriez que j'améliore.
J'espère que ça aidera quelqu'un.
la source
UILabel
etUITextView
. Merci!Merci pour les réponses, j'ai vraiment aimé l'extension mais je ne me suis pas encore convertie en swift. Pour ces anciens élèves encore en Objective-C, cela devrait aider un peu: D
Bon codage! --Greg Cadre
la source
Extension de chaîne Swift 3 incluant une police nulle. La propriété sans police est tirée d'une autre question SO, je ne me souviens pas laquelle :(
la source
Voici une extension pour NSString qui renvoie un NSAttributedString à l'aide d'Objective-C.
Il gère correctement une chaîne avec des balises HTML et définit la police et la couleur de police souhaitées tout en préservant les balises HTML, notamment BOLD, ITALICS ...
Mieux encore, il ne repose sur aucun marqueur HTML pour définir les attributs de police.
la source
En fait, il existe un moyen encore plus simple et plus propre. Définissez simplement la police après avoir analysé le HTML:
la source