Swift, mover contenido detrás del keyboard no se reinicia después de descartar

Tengo una uiscrollview en uno de mis VC's. Dentro del scrollView, tengo múltiples TF's, botones, etc. Estoy usando el código a continuación, según la documentation de Apple, para mover el scrollView cuando se llama a una notificación de keyboard, para upload los campos de text ocultos. Sin embargo, cuando cierro el keyboard, el scrollView no se restablece ni retrocede, simplemente se queda en la location "desplazada".

¿Me estoy perdiendo de algo? Tengo una variable miembro de la class llamada:

var activeTextField: UITextField! 

¿Estoy usando esto correctamente con los methods de delegado?

 (func registerForKeyboardNotifications() { let notificationCenter = NSNotificationCenter.defaultCenter() notificationCenter.addObserver(self, selector: "keyboardWillBeShown:", name: UIKeyboardWillShowNotification, object: nil) notificationCenter.addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil) } func keyboardWillBeShown(sender: NSNotification) { let info: NSDictionary = sender.userInfo! let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as NSValue let keyboardSize: CGSize = value.CGRectValue().size let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0) scrollView.contentInset = contentInsets scrollView.scrollIndicatorInsets = contentInsets // If active text field is hidden by keyboard, scroll it so it's visible // Your app might not need or want this behavior. var aRect: CGRect = self.view.frame aRect.size.height -= keyboardSize.height let activeTextFieldRect: CGRect? = activeTextField?.frame let activeTextFieldOrigin: CGPoint? = activeTextFieldRect?.origin if (!CGRectContainsPoint(aRect, activeTextFieldOrigin!)) { scrollView.scrollRectToVisible(activeTextFieldRect!, animated:true) } } // Called when the UIKeyboardWillHideNotification is sent func keyboardWillBeHidden(sender: NSNotification) { let contentInsets: UIEdgeInsets = UIEdgeInsetsZero scrollView.contentInset = contentInsets scrollView.scrollIndicatorInsets = contentInsets } func textFieldDidBeginEditing(textField: UITextField!) { activeTextField = textField scrollView.scrollEnabled = true } func textFieldDidEndEditing(textField: UITextField!) { activeTextField = nil scrollView.scrollEnabled = false } override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.registerForKeyboardNotifications() } override func viewDidDisappear(animated: Bool) { super.viewWillDisappear(animated) NSNotificationCenter.defaultCenter().removeObserver(self) } 

Lo hice y funcionó para mí. Parece mucho más fácil que tu manera. Utilicé una UITextView para mi proyecto. Pero debería funcionar igual con un UITextField. El – / + 25 fue solo para permitir que se muestre el título.

 func textViewDidBeginEditing(textView: UITextView) { myScrollView.setContentOffset(CGPointMake(0, textView.frame.origin.y-25), animated: true) } func textViewDidEndEditing(textView: UITextView) { myScrollView.setContentOffset(CGPointMake(0, -textView.frame.origin.y+25), animated: true) } 

Tienes que cambiar la primera línea de keyboardWillBeHidden

en lugar de:

 let contentInsets: UIEdgeInsets = UIEdgeInsetsZero 

escribir:

 let insets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top, 0, 0, 0) 

Espero ayudarte

Además de la respuesta de Anna, también debe utilizar let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top, 0.0, keyboardSize.height, 0.0) en el keyboardWillBeShown let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top, 0.0, keyboardSize.height, 0.0) para evitar que una vista de text desaparezca debajo de la barra de navigation.

El problema es ese

 var activeTextField: UITextField! 

Debe replace activeTextField con el otro UITextField (por ejemplo, un campo de text que existe en el guión gráfico), y puede encontrar que scrollview puede desplazarse cuando aparece el keyboard.