未使用表情符号键盘调用 UIKeyboardWillChangeFrame 通知

Posted

技术标签:

【中文标题】未使用表情符号键盘调用 UIKeyboardWillChangeFrame 通知【英文标题】:UIKeyboardWillChangeFrame Notification not called with emoji keyboard 【发布时间】:2018-02-27 10:53:21 【问题描述】:

首先我有一个 UIViewController 监听 UIKeyboardWillShow 通知来调整键盘的屏幕。但是每次我换成表情键盘时,通知都没有被调用。

所以,我改成这样的 UIKeyboardWillChangeFrame 通知

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

如果我只是通过点击键盘类型更改为表情符号,它似乎工作正常。

但是,如果我按住键盘类型进行选择(我的键盘有多种语言)并选择表情符号键盘,则不会触发通知。

以前有人遇到过这种情况吗?有什么建议吗?

【问题讨论】:

我的应用程序会根据键盘是否显示来调整屏幕,并且在选择表情符号键盘时也能正常工作。你介意展示你的代码吗? 我编辑了我的问题@TPN1994。但我真的只是添加了观察者,它适用于其他情况。我认为这在 ios 11 上可能是一个问题,因为在其他设备上它也可以正常工作......:/ 我也有这个问题。 但是,如果我按住键盘类型进行选择(我的键盘有多种语言)并选择表情符号键盘,则不会触发通知。 这似乎只发生在 iOS 11 上。 我认为这是 iOS 11 中的一个错误,我向雷达报告了它,ID:34540300 【参考方案1】:

这是 iOS 11 中的一个错误,但有一个 hacky 临时解决方案:

您可以收听语言模式的变化:

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

并检查表情符号:

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

【讨论】:

以上是关于未使用表情符号键盘调用 UIKeyboardWillChangeFrame 通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swiftui 创建表情符号键盘?

android studio 从默认键盘打开表情符号键盘

表情符号(表情)视图/键盘布局的实现

React-native:打开表情符号键盘

如何在其他设备上显示我的键盘扩展的表情符号

iOS崩溃:在键盘上敲击地球仪以转到表情符号键盘会导致崩溃