2017-09-18 1 views
5

J'ai d'abord demandé à UIViewController d'écouter la notification UIKeyboardWillShow pour ajuster l'écran du clavier. Mais chaque fois que je passais au clavier emoji, la notification n'était pas appelée.UIKeyboardWillChangeFrame La notification n'est pas appelée avec le clavier emoji

J'ai donc changé de notification UIKeyboardWillChangeFrame comme celui-ci

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardChanged(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 

Il semble fonctionner très bien si je change juste emoji en tapant sur le type de clavier. Toutefois, si j'appuie sur le type de clavier et le maintenez enfoncé pour sélectionner (mon clavier a plusieurs langues) et que vous sélectionnez le clavier emoji, la notification n'est pas déclenchée.

Quelqu'un avait quelque chose comme ça avant? Aucune suggestion?

+0

Mon application ajuste l'écran en fonction de si le clavier montre ou non et cela fonctionne bien pour quand le clavier emoji est également sélectionné. Cela vous dérange de montrer votre code? – TNguyen

+0

Je modifie ma question @ TPN1994. Mais je ne fais que rajouter l'observateur et ça marche très bien pour les autres cas. Je pense que cela peut être un problème sur iOS 11 parce que sur d'autres appareils cela fonctionne bien aussi:/ – GustavoAzOl

+0

si vous mettez des points d'arrêt/instructions d'impression voyez-vous que c'est toujours le cas qu'il n'est pas appelé? Je me souviens d'un bug bizarre où ni UIKeyboardWillShow ni UIKeyboardWillHide n'étaient appelés même si je les observais. Malheureusement, je ne me souviens plus lequel. Néanmoins, l'affichage du code entier pourrait aider encore. – TNguyen

Répondre

4

Ce bogue dans iOS 11, mais il y a une solution temporaire hacky :

Vous pouvez écouter les changements de mode de langue:

NotificationCenter.default.addObserver(self, selector: #selector(inputModeDidChange(_:)), name: .UITextInputCurrentInputModeDidChange, object: nil) 

Et vérifier emoji:

if([[UITextInputMode currentInputMode].primaryLanguage isEqualToString:@"emoji"]) // layout again