2017-10-17 6 views
0

Je suis confronté au problème du déplacement de la vue lorsque le clavier couvre un élément qui vient de gagner le premier répondeur. J'ai commencé en regardant this question et cela m'a donné une bonne longueur d'avance. Après avoir ajouté les observateurs à UIKeyboardWillShow et UIKeyboardWillHide j'ai fini avec le code suivant:Gestion de UIView lorsque le clavier apparaît

func keyboardWillShow(notification: Notification) { 

     guard let userInfo = notification.userInfo, 
       let kbRect = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue, 
       let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double else { 
      return 
     } 

     let kbSize = kbRect.cgRectValue.size 

     UIView.animate(withDuration: duration) { 
      self.view.transform = CGAffineTransform(translationX: 0, y: -kbSize.height) 
     } 
    } 

    func keyboardWillHide(notification: Notification) { 
     UIView.animate(withDuration: 0.3) { 
      self.view.transform = CGAffineTransform(translationX: 0, y: 0) 
     } 
    } 

Il fonctionne très bien dans le sens où la vue se déplace vers le haut et vers le bas quand un gain de champ de texte le premier répondeur. Cependant, lorsque vous appuyez sur une touche, la vue se déplace à nouveau et ne permet pas de la déplacer en premier lieu. J'ai fait un petit GIF pour mieux décrire ce comportement indésirable, la première fois que le clavier apparaît et disparaît montre le bon comportement, la deuxième fois, quand une touche est pressée, montre le non désiré.

problem presented

Ainsi, la question est, est-il un moyen que je pouvais empêcher le mouvement de vue quand une touche est enfoncée? Je voudrais que la vue reste "up" lorsque l'utilisateur utilise le clavier pour insérer du texte.

+0

Comment avez-vous configuré cette image? Quelles sont les contraintes? –

+0

@Lu_ il m'arrive à chaque vue, cette image que j'ai juste un test UIView que j'ai fait pour illustrer le problème que j'ai. Les contraintes sur l'image sont juste en haut, en tête et en fin de superview, une en textfield en bas, toutes avec 8 comme valeur –

Répondre

0

Vous devez déplacer vue app, transformons pas, utilisez:

self.view.frame.origin.y -= kbSize.height 

transformatrice doit se comporter comme il est en ce moment

0

Définir vos UIView comme sortie et insérez ce code dans viewDidLoad

yourView.translatesAutoresizingMaskIntoConstraints = true