swift - 当键盘未显示时调用 KeyboardDidShow

标签 swift keyboard

所以我使用 KeyboardDidShow 设置了键盘观察器,这样我就可以仅在显示键盘时向上移动 View 。但是,KeyboardDidShow 在每个 View 启动时运行,并且也在随机时间运行。我尝试过监视键盘框架,并且仅在框架发生变化时才移动 View ,但即使没有显示键盘, View 仍然会经常移动。通常,每当 View 首次启动时都会发生这种情况,因此我尝试添加延迟,但它不太可靠。

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    }

@objc func keyboardDidShow(_ notification: Notification) {

    let userInfo = notification.userInfo!
    let beginFrameValue = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)!
    let beginFrame = beginFrameValue.cgRectValue
    let endFrameValue = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)!
    let endFrame = endFrameValue.cgRectValue

    if beginFrame.equalTo(endFrame) {
        return
    } else {
        let indexPath = IndexPath(item: 0, section: 0)
        if UIScreen.main.bounds.height == 812 {
            collectionView?.contentInset = UIEdgeInsets(top: 318 + view.safeAreaInsets.bottom, left: 0, bottom: 73, right: 0)
        } 
        collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: true)
    }
}

最佳答案

问题是您配置了错误的通知。不要使用 UIKeyboardDidShow。使用 UIKeyboardWillShow,并检查旧框架、新框架以及新框架是否会覆盖您的 View 。

实现稳健的实现并非易事,但这肯定是一个先前已解决的问题,已在此处多次解释过。

关于swift - 当键盘未显示时调用 KeyboardDidShow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52467718/

相关文章:

swift - 在 Swift 中,没有办法获取返回函数的参数名称?

android - Dialog 的 setSoftInputMode 在键入时不隐藏 EditText?

javascript - 如何检测 Javascript 中的按键?

ios - 快速执行异步任务后键盘不会关闭

ios - 快速删除图像文件,抛出文件不存在

ios - Swift 中缺少参数错误的参数

regex - 通过在 Swift 中使用正则表达式进行匹配来获取所有可能的范围

android - 如何在 Android 上创建多个 IME(输入法编辑器)子类型?

c# - Resharper Ctrl-T 映射丢失

ios - customFooterView 内的 UISwitch 需要调用使用 Swift 声明的类外部的方法