【问题标题】:Wrong keyboard hide错误的键盘隐藏
【发布时间】:2021-05-21 20:57:21
【问题描述】:

tableView.keyboardDismissMode = .onDrag 有一些奇怪的问题。 当textField 点击没问题时,我抬起了我的视线。然后我想像在 iMessage 中一样关闭我的键盘,但在我的情况下,当 keyboardWillHide 通知称为 view.frame.origin.y 不等于 0。它等于 12。有趣的事实是我的代码在模拟器中工作得非常酷,但这个错误只在真正的 iPhone 11 上. 有什么想法吗?

我的带有键盘通知的代码

@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
      }

【问题讨论】:

  • 您响应键盘显示和隐藏的代码可能过于简单。通常,真实的代码对正在发生的事情要复杂得多。
  • 你不是想移动视图控制器的视图吗?太疯狂了。你应该移动一个子视图。另外,自动布局呢?如果您不使用自动布局,则应该使用。但是如果你这样做了,那么你就不能设置视图的框架。

标签: ios swift uitextfield


【解决方案1】:

我找到了解决方案。麻烦是因为keyboardWillShow 多次调用。 处理它的代码。

@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
                }
            }
        }
    }

【讨论】:

  • 正确。但是请注意,您并没有说任何新内容。以前在 Stack Overflow 上也以这种方式解释过同样的问题。
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多