objective-c uiscrollview autolayout uitextview nslayoutconstraint

objective c - UITextView dentro de UIScrollView con AutoLayout



objective-c nslayoutconstraint (3)

Estoy intentando colocar UITextView dentro de UIScrollView con AutoLayout sin suerte. Lo que he intentado es,

  • Coloqué UIScrollView dentro de la vista principal en Storyboard.
  • Coloqué UITextView dentro de UIScrollView en el guión gráfico y deshabilité el desplazamiento habilitado
  • Configuré restricciones (inicial, final, superior, inferior) en UIScrollView
  • Configuré restricciones (top, lead, trailing, height) en UITextView
  • Creé IBOutlet de restricción de altura de UITextView
  • Puse un texto (una gran cantidad de texto que puede causar desplazamiento) en UITextView en viewDidLoad ()
  • Establecí una restricción de altura de UITextView con el siguiente código. Lo he intentado justo después de configurar el texto en viewDidLoad () y viewDidLayoutSubviews () sin suerte

self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, FLT_MAX)].height;

UITextView está alcanzando su altura, pero UIScrollView no. ¿Hay algo que me haya perdido?


Después de unos días de investigación y de ensuciarme las manos con UIScrollView + UITextView + Auto Layout, obtuve con éxito un UIScrollView completamente funcional. Quiero compartir mi solución en caso de que alguien se atasque en la misma situación.

  1. Agregue UIScrollView dentro de la vista principal en Storyboard
  2. Añadir UIView dentro de UIScrollView
  3. Agregue UITextView dentro de UIView (la vista agregada en el paso 2)
  4. Asegúrese de que "Desplazamiento habilitado" de UITextView no esté marcado
  5. Agregue 4 restricciones (inicial, final, superior, inferior) en UIScrollView
  6. Agregue 4 restricciones (inicial, final, superior, inferior) en UIView (la vista agregada en el paso 2)
  7. Agregue la restricción "Width Equally" en UIView (la vista agregada en el paso 2) y la vista principal
  8. Agregue 5 restricciones (inicial, final, superior, inferior, altura) en UITextView. Después de este paso, no debería recibir ningún error ni advertencia sobre las restricciones.
  9. Agregue la restricción de altura UITextView IBOutlet en el ViewController. @property (nonatomic, weak) IBOutlet NSLayoutConstraint *textViewHeightConstraint; y conectalo en Storyboard
  10. Cambie la restricción de altura UITextView mediante programación. self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, CGFLOAT_MAX)].height;

Después de todos estos 10 pasos, obtendrás UIScrollView totalmente funcional con UITextView dentro y serás feliz.


Parece que esta pregunta tiene una respuesta que ha funcionado para varias personas. Sin embargo, cabe señalar que la documentation establece:

Colocar una vista de texto dentro de una vista de desplazamiento. Las vistas de texto manejan su propio desplazamiento. No debe incrustar objetos de vista de texto en vistas de desplazamiento. Si lo hace, puede producirse un comportamiento inesperado debido a que los eventos táctiles para los dos objetos se pueden mezclar y manejar incorrectamente.

Antes de intentar colocar un UITextView en un UIScrollView , debe considerar si esto es realmente necesario. Si la vista de texto es parte de un diseño complejo dentro de la vista de desplazamiento, entonces observe el uso del contenedor UIView en la respuesta aceptada.

Ver también: Vistas de desplazamiento Vistas de desplazamiento interior