Estoy tratando de obtener un fragmento de texto formateado en html para que se vea bien en un iPhone en un UITableViewCell.
Hasta ahora tengo esto:
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];
Este tipo de trabajos. ¡Recibo un texto que tiene 'Nice' en negrita! Pero ... ¡también establece que la fuente sea Times Roman! Esta no es la fuente que quiero. Estoy pensando que necesito establecer algo en el documento Atributos, pero no puedo encontrar ningún ejemplo en ningún lado.
html
ios
nsattributedstring
phil
fuente
fuente
Respuestas:
Versión Swift 2 , basada en la respuesta de Javier Querol
Swift 3.0 y iOS 9+
Swift 5 y iOS 11+
fuente
font-family: '-apple-system', 'HelveticaNeue';
(que funciona y también es compatible con versiones anteriores). Si solo es compatible con iOS9font-family: -apple-system;
se puede usarcolor: #000000
. Vea este enlace para convertir UIColor a cadena hexadecimal: gist.github.com/yannickl/16f0ed38f0698d9a8ae7De esta manera, no necesita especificar qué fuente desea, tomará la fuente y el tamaño de la etiqueta.
fuente
NSUnicodeStringEncoding
y luego codifica los datos de nuevo a los caracteres conNSUTF8StringEncoding
. ¿Está bien?En realidad encontré una solución funcional a este problema:
Cambiar la fuente en su cadena de respuesta HTML antes de que se analice.
Ejemplo:
Versión rápida:
fuente
Lo averigué. Poco oso, y tal vez no sea la mejor respuesta.
Este código pasará por todos los cambios de fuente. Sé que está usando "Times New Roman" y "Times New Roman BoldMT" para las fuentes. Pero independientemente, esto encontrará las fuentes en negrita y me permitirá restablecerlas. También puedo restablecer el tamaño mientras estoy en eso.
Sinceramente, espero / creo que hay una manera de configurar esto en el momento del análisis, pero no puedo encontrarlo si lo hay.
fuente
Un enfoque más genérico es mirar los rasgos de la fuente mientras se enumera y crear una fuente con los mismos rasgos (negrita, cursiva, etc.):
fuente
Sí, hay una solución más fácil. ¡Establezca la fuente en la fuente html!
Espero que esto ayude.
fuente
Actualización rápida de 4+ de la extensión UILabel
iOS 9+
fuente
Las respuestas sobre todo funcionan bien si está haciendo la conversión al mismo tiempo que crea la
NSAttributedString
. Pero creo que una mejor solución, que funciona en la cadena en sí y, por lo tanto, no necesita acceso a la entrada, es la siguiente categoría:Usar como:
Funciona en iOS 7+
fuente
Mejora en la solución de Victor, incluido el color:
Para que esto funcione, también necesitará YLColor.swift de la conversión de uicolor a hexadecimal https://gist.github.com/yannickl/16f0ed38f0698d9a8ae7
fuente
El uso de NSHTMLTextDocumentType es lento y difícil de controlar. Te sugiero que pruebes mi biblioteca que se llama Atributika. Tiene su propio analizador muy rápido. También puede tener cualquier nombre de etiqueta y definir cualquier estilo para ellos.
Ejemplo:
Lo puedes encontrar aquí https://github.com/psharanda/Atributika
fuente
Uniendo las respuestas de todos, hice dos extensiones que permiten configurar una etiqueta con texto html. Algunas respuestas anteriores no interpretaron correctamente la familia de fuentes en las cadenas atribuidas. Otros estaban incompletos para mis necesidades o fallaron de otras maneras. Avíseme si hay algo que le gustaría que mejorara.
Espero que esto ayude a alguien.
fuente
UILabel
yUITextView
. ¡Gracias!Gracias por las respuestas, me gustó mucho la extensión pero aún no me he convertido a swift. Para aquellos viejos estudiantes que todavía están en Objective-C, esto debería ayudar un poco: D
¡Feliz codificación! --Greg Frame
fuente
Extensión Swift 3 String que incluye una fuente nula. La propiedad sin fuente se toma de otra pregunta SO, no recuerdo cuál :(
fuente
Aquí hay una extensión para NSString que devuelve una NSAttributedString usando Objective-C.
Maneja correctamente una cadena con etiquetas HTML y establece la fuente y el color de fuente deseados al tiempo que conserva las etiquetas HTML, incluidas BOLD, ITALICS ...
Lo mejor de todo es que no se basa en ningún marcador HTML para establecer los atributos de fuente.
fuente
En realidad, existe una forma aún más fácil y limpia. Simplemente configure la fuente después de analizar el HTML:
fuente