Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
Swift 4.2 Hacer que la parte inferior de tableView se mueva hacia arriba cuando se muestra el teclado

Aunque he buscado, estoy confundido acerca de cuál es la mejor manera de abordar esto.

Tengo un tableView donde la celda inferior es una entrada a la lista, de la misma manera que funcionan los recordatorios de Apple. Cuando hay demasiados elementos en la lista, el teclado cubre la lista y no puedo ver lo que estoy escribiendo.

Pensé que necesitaba cambiar el tamaño físico de la vista de la tabla y asegurarme de que se desplaza hacia abajo cuando se muestra el teclado.

Algunos han dicho observadores del teclado, pero la mayoría del código que he encontrado para esto está desactualizado y tiene errores cuando se coloca en Xcode.

NSNotificationCenter Swift 3.0 en el teclado mostrar y ocultar

Esto es lo mejor que puedo encontrar, pero también escucho sobre restricciones, usando un UITableViewController en lugar de incrustar un UITableView, etc.

Este es el código que tengo hasta ahora:

 NotificationCenter.default.addObserver(self, selector: #selector(EntryViewController.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(EntryViewController.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) @objc func keyboardWillShow(notification: Notification) { if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { print("notification: Keyboard will show") if self.view.frame.origin.y == 0{ self.view.frame.origin.y -= keyboardSize.height } } } @objc func keyboardWillHide(notification: Notification) { if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { if self.view.frame.origin.y != 0 { self.view.frame.origin.y += keyboardSize.height } } }

Creo que esto mueve toda la vista hacia arriba, lo que significa que las áreas seguras (como la barra de navegación, etc.) tienen TableView debajo de ellas. ¿Hago que la vista de navegación no sea transparente en este enfoque?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Una solución (que a veces uso) es simplemente cambiar el desplazamiento del contenido de tableView cuando aparece/desaparece el teclado. Creo que esto funcionaría en su instancia en lugar de variar las restricciones de tableView como mencionó que su UIViewController es un UITableViewController . Consulte el siguiente código para ver mi sugerencia, ¡espero que esto ayude!

Manejar notificaciones:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) NotificationCenter.default.addObserver(self, selector: #selector(EntryViewController.keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(EntryViewController.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) NotificationCenter.default.removeObserver(self) }

Comportamiento:

 @objc func keyboardWillShow(notification: Notification) { if let keyboardHeight = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height { print("Notification: Keyboard will show") tableView.setBottomInset(to: keyboardHeight) } } @objc func keyboardWillHide(notification: Notification) { print("Notification: Keyboard will hide") tableView.setBottomInset(to: 0.0) }

Extensiones:

 extension UITableView { func setBottomInset(to value: CGFloat) { let edgeInset = UIEdgeInsets(top: 0, left: 0, bottom: value, right: 0) self.contentInset = edgeInset self.scrollIndicatorInsets = edgeInset } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda