Ios 错误的键盘隐藏

Ios 错误的键盘隐藏,ios,swift,uitextfield,Ios,Swift,Uitextfield,我对tableView.keyboardismissmode=.onDrag有一些奇怪的问题。 当textField点击ok时,我提升了视图。然后,我想完全像在iMessage中一样关闭键盘,但在我的情况下,keyboard将隐藏名为view.frame.origin.y的通知不等于0。等于12。有趣的是,我的代码在模拟器中运行得很酷,但这个bug只在真正的iPhone11上出现。你知道这到底是什么吗 我的带有键盘通知的代码 @objc func keyboardWillShow(notific

我对
tableView.keyboardismissmode=.onDrag
有一些奇怪的问题。 当
textField
点击ok时,我提升了视图。然后,我想完全像在iMessage中一样关闭键盘,但在我的情况下,
keyboard将隐藏
名为
view.frame.origin.y的通知
不等于0。等于12。有趣的是,我的代码在模拟器中运行得很酷,但这个bug只在真正的iPhone11上出现。你知道这到底是什么吗

我的带有键盘通知的代码

@objc func keyboardWillShow(notification: NSNotification) {
            if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
                self.view.frame.origin.y = -keyboardSize.size.height + (self.tabBarController?.tabBar.bounds.height)!
            }
        }
        
     @objc func keyboardWillHide(notification: NSNotification) {
            self.view.frame.origin.y = 0
      }

我找到了解决办法。麻烦是因为键盘将显示多次调用。 代码来处理它

@objc func keyboardWillShow(notification: NSNotification) {
        var _kbSize:CGSize!
        
        if let info = notification.userInfo {
            
            let frameEndUserInfoKey = UIResponder.keyboardFrameEndUserInfoKey
            
            //  Getting UIKeyboardSize.
            if let kbFrame = info[frameEndUserInfoKey] as? CGRect {
                
                let screenSize = UIScreen.main.bounds
                
                let intersectRect = kbFrame.intersection(screenSize)
                
                if intersectRect.isNull {
                    _kbSize = CGSize(width: screenSize.size.width, height: 0)
                } else {
                    _kbSize = intersectRect.size
                }
                
                if _kbSize.height != 0 {
                    self.view.frame.origin.y = -_kbSize.height + (self.tabBarController?.tabBar.bounds.height)!
                } else {
                    self.view.frame.origin.y = 0
                }
            }
        }
    }

用于响应键盘显示和隐藏的代码可能太简单了。通常情况下,真正的代码对于正在发生的事情要复杂得多。您没有试图移动视图控制器的视图,是吗?那太疯狂了。您应该正在移动子视图。还有,自动布局呢?如果不使用自动布局,则应该使用。但是如果这样做,则无法设置视图的框架。请更正。但是,请注意,您并没有说任何新的内容。在堆栈溢出之前,同样的问题也曾以同样的方式进行过解释。