Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

182
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda