Swift: ¿Cómo puedo hacer que un campo de text coincida con el keyboard durante la animation, cuando tengo una barra de tabs inferior?

Tengo una aplicación que tiene una barra de tabs en la parte inferior de la pantalla (40 pt alto), y un UITextField directamente encima de eso. Cuando el keyboard se activa, quiero animar el campo de text para que se mueva mientras se pega a la parte superior del keyboard.

Sin embargo, esto es muy complicado porque el campo de text no debe moverse hasta que la animation del keyboard supere la barra de tabs inferior.

Así que aquí está la animation que quiero lograr:

  • El keyboard comienza a animarse hacia arriba, el campo de text se queda quieto
  • El keyboard alcanza la parte superior de la barra de tabs inferior.
  • El campo de text comienza a animarse hacia arriba y coincide con el rest de la curva de animation del keyboard, de manera que la parte inferior del campo de text está bloqueada en la parte superior del keyboard.

Me gustaría usar una function de relajación personalizada para esto, porque no se ve bien si solo agrego un pequeño retraso a la animation. Comprime la curva de animation, lo que significa que el campo de text no permanece bloqueado en la parte superior del keyboard.

He probado algunas bibliotecas de animation paramétricas, pero estoy teniendo dificultades para que funcionen con Swift.

Encontré muchos resources para los casos en que el campo de text se encuentra en la parte inferior de la pantalla, como esta publicación . Pero, lamentablemente, no pueden modificarse fácilmente para tener en count una barra de tabs inferior.

Si quieres lograr un efecto como en la aplicación de posts en ios, puedes hacerlo así:

Primero, no ponga el campo de text directamente en la jerarquía de la vista.

canBecomeFirstResponder método canBecomeFirstResponder en viewController y devuélvalo desde él.

 override func canBecomeFirstResponder() -> Bool { return true } 

Luego anule el método inputAccessoryView en el controller de vista y devuelva la vista que desea mostrar en la parte superior del keyboard.

 override func inputAccessoryView() -> UIView { return textField } 

Nota: debe crear textField y establecerlo en marco. Puede crearlo como propiedad perezosa del controller de vista.