ios swift uitableview autolayout uitextfield

ios - Determine el ancho de UITextView en heightForRowAtIndexPath con diseño automático



swift uitableview (0)

Un problema bastante enrevesado, en busca de una solución elegante:

Una subclase UITableViewCell tiene un UILabel a la izquierda y un UITextView a la derecha. Tanto la etiqueta como la vista de texto tienen contenido dinámico . Estoy usando la vista de texto en lugar de otra etiqueta porque necesito el reconocimiento de enlace de dirección.

La etiqueta tiene una resistencia a la compresión más alta que la vista de texto, por lo que su borde derecho se expandirá hacia la derecha según sea necesario (hasta cierto límite). El ancho de la vista de texto se comprimirá a su vez. La vista de texto se establece en ajuste de palabra para expandir hacia abajo .

Como una vista de texto es en sí misma un UIScrollView , el mecanismo de dimensión automática normal de una vista de celdas de vista de tabla de tamaño dinámico no funcionará (es decir, utilizando UITableViewAutomaticDimension ). Por lo tanto, traté de implementar heightForRowAtIndexPath . Para determinar la altura necesaria, pensé que solo necesitaba:

  • El texto en la etiqueta, más sus atributos
  • El texto en la vista de texto, más sus atributos
  • El ancho de la vista de tabla (ya que es "simple" en lugar de "agrupado")

Con esta información, sizeThatFits , puedo usar sizeThatFits en objetos auxiliares para determinar la altura necesaria.

Sin embargo, soy reacio a codificar los márgenes horizontales entre la etiqueta y la vista de texto en el cálculo de mi tamaño, así que teóricamente también necesito puntos de venta NSLayoutConstraint para

  • El margen izquierdo de la etiqueta a su superview
  • El ancho máximo permitido de la etiqueta
  • La distancia horizontal entre la etiqueta y el campo de texto
  • El margen derecho del campo de texto a su superview

¡Esto parece realmente loco! Mientras escribía la implementación de esto, me pregunté si no había una manera más fácil de lograr lo mismo. (Es por eso que todavía no escribí el código para publicar aquí.) Después de todo, el único problema difícil aquí es cómo obtener el ancho disponible para la vista de texto , pero la forma de llegar allí parece excesivamente compleja.

¿Alguna idea para una solución concisa y elegante?

Notas al margen: esto debe calcularse antes de que se represente la celda para que se muestre. Además, configurar el scrollingEnabled la vista de texto sizeThatFits en false produce resultados extraños al usar sizeThatFits .