2017-09-18 68 views
5

Pierwszy miałem UIViewController listenning do zgłoszenia UIKeyboardWillShow dostosowania ekranu na klawiaturze. Ale za każdym razem, gdy zmieniłem klawiaturę emoji, powiadomienie nie zostało wywołane.Powiadomienie UIKeyboardWillChangeFrame nie sprawdził z Klawiatura z emotikonami

Więc zmieniłem do UIKeyboardWillChangeFrame powiadomienia jak ten

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

Wydaje się działać prawidłowo, jeśli tylko zmieni się emotikonami stukając typ klawiatury.

Jednak gdybym nacisnąć i przytrzymać, aby wybrać typ klawiatury (moja klawiatura ma więcej niż jeden język) i wybierz klawiaturę Emotikon, powiadomienie nie jest zwolniony.

Ktoś kiedyś miał coś takiego? Jakieś sugestie?

+0

Moja aplikacja dostosowuje ekran w zależności od tego, czy klawiatura jest wyświetlana, czy nie i działa prawidłowo, gdy wybrana jest również klawiatura emoji. Czy chcesz pokazać swój kod? – TNguyen

+0

Edytuję moje pytanie @ TPN1994. Ale tak naprawdę dodaję tylko obserwatora i działa dobrze dla innych przypadków. Myślę, że to może być problem na iOS 11, ponieważ na innych urządzeniach działa też dobrze ...:/ – GustavoAzOl

+0

jeśli umieścisz breakpointy/instrukcje drukowania, czy widzisz, że zawsze jest tak, że nie jest wywoływany? Pamiętam, że miałem dziwny błąd, w którym albo 'UIKeyboardWillShow' lub' UIKeyboardWillHide' nie był wywoływany, mimo że ich obserwowałem. Niestety, nie pamiętam, który to był. Niemniej jednak, wysłanie całego kodu może pomóc. – TNguyen

Odpowiedz

4

Jest to błąd w iOS 11, ale jest hacky rozwiązanie tymczasowe:

Można słuchać zmiany trybu język:

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

i sprawdzić Emotikony:

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