2017-10-14 8 views
1

J'utilise le code suivant pour faire défiler UITableView et son pied de page sur l'affichage/le masquage du clavier. Il fonctionnait bien avec moi dans iOS 10, mais une fois que j'ai mis à jour vers iOS 11, le défilement ne fonctionne pas bien.Défilement UITableView afficher/masquer le clavier iOS11

code:

func registerNotificationObservers() 
{  
    NotificationCenter.default.addObserver(self, selector: #selector(ArticleDetailsVC.keyboardWillShow), name: .UIKeyboardWillShow, object: nil) 
    NotificationCenter.default.addObserver(self, selector:#selector(ArticleDetailsVC.keyboardWillHide), name: .UIKeyboardWillHide, object: nil) 
} 

func removeNotificationObservers() 
{ 
    NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil) 
    NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil) 
} 

@objc func keyboardWillShow(_ notification: Notification) { 
    print("keyboardWillShow") 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
    { 
     if self.commentsTableView.frame.origin.y == 0{ 
      print("keyboardWillShow ..") 
      self.tableViewFooter.frame.origin.y -= keyboardSize.height - 50 
      self.commentsTableView.frame.origin.y -= keyboardSize.height 

     } 


    } 
} 


@objc func keyboardWillHide(_ notification: Notification) { 
    print("keyboardWillHide") 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
    { 
     if self.commentsTableView.frame.origin.y != 0{ 

      print("keyboardWillHide ..") 
      self.tableViewFooter.frame.origin.y += keyboardSize.height + 50 
      self.commentsTableView.frame.origin.y += keyboardSize.height 
     } 

    } 
} 

espoir de résoudre ce problème.

Répondre

0

Après avoir ajouté les lignes suivantes (normalement viewDidLoad()), le comportement de votre tableView sera le même que iOS 10 de:

if #available(iOS 11.0, *) { 
     self.commentsTableView.contentInsetAdjustmentBehavior = .never 
    } 
+0

essayé, pas travailler :( – user1553381

+0

J'ai essayé votre code et le mien, le tableView se déplacer vers le haut lorsque le clavier montrant sur iOS 11. Souvenez-vous d'appeler votre 'registerNotificationObservers()' méthode et le code mien dans 'viewDidLoad()'. –

+0

Mon code fonctionne bien quand l'application vient de démarrer, mais quand je cache le clavier par 'self.view.endEditing (true)' alors essayez de le montrer à nouveau, la table ne défile pas – user1553381

0

Comme UITableView hérite UIScrollView, vous utilisez cette fonction UIScrollViewDelegate ci-dessous:

func scrollViewDidScroll(_ scrollView: UIScrollView) 
{ 
     if scrollView == self.tableView 
     { 
      // show/hide Keyboard 
     } 
} 
0

Après avoir mis le point d'arrêt sous si laissé keyboardSize J'ai vu que parfois, pour UIKeyboardFrameBeginUserInfoKey hauteur du clavier pourrait être 0.0

Changer UIKeyboardFrameBeginUserInfoKey à UIKeyboardFrameEndUserInfoKey m'a aidé dans cette situation

donc votre code:

@objc func keyboardWillShow(_ notification: Notification) { 
    print("keyboardWillShow") 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue 
    { 
     if self.commentsTableView.frame.origin.y == 0{ 
      print("keyboardWillShow ..") 
      self.tableViewFooter.frame.origin.y -= keyboardSize.height - 50 
      self.commentsTableView.frame.origin.y -= keyboardSize.height 

     } 
    } 
} 

espère que cela résoudra votre problème trop

Quant à la keyboardWillHide méthode , Je l'ai laissé avec UI KeyboardFrameBeginUserInfoKey parce qu'il n'y avait pas de problèmes avec elle