Tengo un texto que debe mostrarse en mi aplicación. El texto contiene enlaces que deben ser interactivos. He intentado algunas soluciones para hacer enlaces tappables en UITextViews
y UILabels
.dimensionando dinámicamente un UIWebView basado en el tamaño de fuente de su contenido
UITextView
enlacesUITextView
proporciona detectores de datos que se recogen en las direcciones URL y los hacen hacer tapping.- Me resulta inutilizable porque el enlace solo se abrirá de forma externa en Safari, no hay manera de tomar el control y hacer lo que quiera con el enlace.
UILabel
enlaces con "etiquetas de lujo" (http://furbo.org/2008/10/07/fancy-uilabels/)- Casi la solución perfecta, que proporciona detección de enlaces y una forma para que el usuario pueda ver y tocar ellos en línea y me da un control completo sobre qué hacer con un enlace cuando se presiona.
- Actualmente inutilizable porque la implementación usa
UIButton
s para superponer los enlaces y no se envuelven con el texto en enlaces largos.
Finalmente me decidí por usar una vista web. Paso el texto a la vista web y construyo un envoltorio HTML básico a su alrededor y todo es caprichoso. Este es el mismo enfoque que usa Twitter para iPhone (también conocido como Tweetie).
El único problema que tengo ahora es que si el texto es demasiado largo, la vista web recorta el desbordamiento y se desplaza para ver el texto recortado. En segundo lugar, si el texto es demasiado corto, hay una gran área de espacio desperdiciado debajo de la vista web.
A diferencia de Tweetie, tengo más contenido debajo de la vista web, y quiero evitar el desbordamiento de desplazamiento o el espacio desperdiciado. La vista web es una subvista de una vista de desplazamiento de todos modos, por lo que el contenido de la página completa puede crecer sin necesidad de desplazarse por las subvistas.
¿Hay alguna manera de cambiar dinámicamente la vista web para que tenga la altura correcta según su contenido?
He intentado muchas cosas hasta ahora, nada parece ser una solución sólida:
sizeToFit
no hace nada (o, más probablemente, simplemente establece el tamaño a lo que el cuadro actual es de todos modos).sizeThatFits:
devuelve su tamaño actual de todos modos.NSString
'ssizeWithFont:constrainedToSize:
no es posible porqueUIWebView
yUIFont
tienen diferentes representaciones de qué tamaño es 18.- Solo para explicar este punto. En mis pruebas, encontré que una vista web con un scaleFactor de 1.0 y
scalesPageToFit
establecido enNO
y un tamaño de fuente para todo el conjunto de páginas a 13.5pt (en CSS) representa texto del mismo tamaño queUILabel
con unUIFont
de tamaño 18. Si alguien puede explicarme, estaría agradecido.
- Solo para explicar este punto. En mis pruebas, encontré que una vista web con un scaleFactor de 1.0 y
- Además, en la webView estoy usando la propiedad CSS
word-wrap: break-word;
para evitar que la vista web se desplace horizontalmente con palabras largas o URL. Debido a esto, el comportamiento de ajuste entre webView yUILineBreakModeWordWrap
difiere por completo. Incluso el uso deUILineBreakModeCharacterWrap
no produce los mismos resultados.
O no hay forma de hacerlo, o estoy siendo tonto y me falta algo simple. Si alguien pudiera darnos una idea, estaría muy agradecido. Gracias.
Se ve bien, lo intentaré la próxima vez que necesite hacer esto. – Jasarien