2017-09-18 15 views
5

Đầu tiên tôi đã có một bản nghe UIViewController cho thông báo UIKeyboardWillShow để điều chỉnh màn hình cho bàn phím. Nhưng mỗi khi tôi thay đổi bàn phím biểu tượng cảm xúc, thông báo không được gọi.UIKeyboardWillChangeFrame Thông báo không được gọi bằng bàn phím biểu tượng cảm xúc

Vì vậy, tôi đã thay đổi để thông báo UIKeyboardWillChangeFrame như thế này

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

Có vẻ như để làm việc tốt nếu tôi chỉ cần thay đổi để biểu tượng cảm xúc bằng cách khai thác kiểu bàn phím.

Tuy nhiên, nếu tôi nhấn và giữ loại bàn phím để chọn (bàn phím của tôi có nhiều ngôn ngữ) và chọn bàn phím biểu tượng cảm xúc, thông báo sẽ không được kích hoạt.

Bất cứ ai cũng có điều gì đó như thế này trước đây? Bất kỳ đề xuất?

+0

Ứng dụng của tôi điều chỉnh màn hình dựa trên việc bàn phím có hiển thị hay không và nó hoạt động tốt khi bàn phím biểu tượng cảm xúc được chọn. Bạn có phiền khi hiển thị mã của mình không? – TNguyen

+0

Tôi chỉnh sửa câu hỏi của mình @ TPN1994. Nhưng tôi thực sự chỉ cần thêm người quan sát và nó hoạt động tốt cho các trường hợp khác. Tôi nghĩ điều này có thể là một vấn đề trên iOS 11 bởi vì trên các thiết bị khác nó hoạt động tốt quá ...:/ – GustavoAzOl

+0

nếu bạn đặt breakpoint/print statement bạn có thấy rằng nó luôn luôn là trường hợp nó không được gọi? Tôi nhớ tôi đã có một lỗi kỳ lạ ở đó 'UIKeyboardWillShow' hoặc' UIKeyboardWillHide' không được gọi mặc dù tôi đang quan sát chúng. Thật không may, tôi không thể nhớ nó là cái gì. Tuy nhiên, việc đăng toàn bộ mã có thể giúp ích. – TNguyen

Trả lời

4

Đây là một lỗi trong iOS 11, nhưng có một giải pháp tạm thời hacky:

Bạn có thể nghe thay đổi chế độ ngôn ngữ:

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

Và kiểm tra các biểu tượng cảm xúc:

if([[UITextInputMode currentInputMode].primaryLanguage isEqualToString:@"emoji"]) // layout again 
Các vấn đề liên quan