Comportamiento dynamic de la desviación UITextView

Estoy tratando de tener una vista de text similar a los posts de iPhone, donde la vista de text inicialmente tiene una restricción (altura <= 100) y el scrollEnabled = false

Este es un enlace al proyecto: https://github.com/akawther/TextView

La vista de text aumenta en altura en function del tamaño de contenido como en la image de la izquierda hasta que alcanza la altura de 100, luego el scrollEnabled se establece en true. Funciona perfectamente hasta que hago clic en el button "enviar" en la parte inferior derecha, donde textView debería estar vacío y volver a la altura original y scrollEnabled se convierte en falso. La image del medio muestra lo que sucede cuando hago clic en el button. Cuando comienzo a escribir, la vista de text se mueve hacia abajo como se ve en la última image a la derecha. Quiero poder hacer clic en el button y eliminar el comportamiento que se muestra en la image central, ¿cómo puedo solucionarlo?

introduzca la descripción de la imagen aquí

import UIKit class ViewController: UIViewController, UITextViewDelegate { @IBOutlet weak var bottomConstraint: NSLayoutConstraint! @IBOutlet weak var messageTextView: UITextView! @IBOutlet weak var parent: UIView! let messageTextViewMaxHeight: CGFloat = 100 override func viewDidLoad() { super.viewDidLoad() self.messageTextView.delegate = self } @IBAction func Reset(sender: AnyObject) { messageTextView.text = "" messageTextView.frame.size.height = messageTextView.contentSize.height messageTextView.scrollEnabled = false self.parent.layoutIfNeeded() } func textViewDidChange(textView: UITextView) { if textView.frame.size.height >= self.messageTextViewMaxHeight { textView.scrollEnabled = true } else { textView.scrollEnabled = false textView.frame.size.height = textView.contentSize.height } } } 

Puedes replicar mi problema siguiendo estos pasos en el proyecto github: 1. sigue escribiendo palabras y presionando entra hasta que comiences a ver el desplazamiento 2. Haz clic en el button que verás que la vista de text sube en el contenedor azul. ¡Este es el problema que quiero eliminar!

Pruebe el siguiente código:

 @IBAction func Reset(sender: AnyObject) { messageTextView.scrollEnabled = false messageTextView.text = "" messageTextView.frame.size.height = messageTextView.contentSize.height parent.frame.size.height = 20 self.view.layoutIfNeeded() } func textViewDidChange(textView: UITextView) { if textView.contentSize.height >= self.messageTextViewMaxHeight { textView.scrollEnabled = true } else { textView.frame.size.height = textView.contentSize.height textView.scrollEnabled = false } } 

Su problema es que UITextView tiene properties conflictivas:

  • Colocar en la pantalla
  • tamaño

El tamaño restringido causará un problema cuando necesite un TextView networkingimensionable. Además, cuando cambia el tamaño del TextView, se cambia su location en este caso.

Método alternativo para abordar el problema:

Intente establecer restricciones para su location en relación con la parte inferior de la pantalla. Cuando aparezca el keyboard, debería mover TextView con él. También establecer restricciones en la altura de un TextView networkingimensionable es una mala práctica a less que esté planeando forzar al usuario a desplazarse.

Espero que esto ayude.

Si está utilizando el layout automático, debería actualizar a la restricción en lugar de actualizar textView.frame Intente crear una IBOutlet para textView heightConstraint y luego establezca la altura actualizada en él.

 IBOutlet weak var textViewHeightConstraint: NSLayoutConstraint! //calculate the height and update the constant textViewHeightConstraint.constant = textView.contentSize.height