未使用表情符号键盘调用 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 通知的主要内容,如果未能解决你的问题,请参考以下文章