WKWebView新浪充值页面键盘点击错位问题

  • 现象如下图所示,可能并不是很清楚。实际上我点击e的时候实际点击的是下方的d,点击c的时候实际是下方的逗号。


    1540452408952554.gif
  • 通过仔细观察现象发现,当点击密码输入框时(第二个,第一个密码输入框在上方超出屏幕了),键盘重新弹出,并把整个页面往上推动了,但是键盘依然处于最下方,没有跟随webview往上移动,所以导致定位不准了。之前使用的是UIWebView,没有这个问题,现在换成了WKWebView。
  • 通过搜索找到了类似的问题
    image.png
  • 两种解决方案,一是修改html,二是设置webview监听键盘弹出事件和scrollview滚动事件,使webview在键盘弹出后复位到未弹出前的位置。
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: NSNotification.Name.UIKeyboardDidShow, object: nil)

  @objc func keyboardWillShow() {
        oldScrollDelegate = self.webview!.scrollView.delegate
        oldOffset = self.webview!.scrollView.contentOffset
        self.webview!.scrollView.delegate = self
    }
    
    @objc func keyboardDidShow() {
        self.webview!.scrollView.delegate = oldScrollDelegate
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        scrollView.contentOffset = oldOffset
    }

你可能感兴趣的:(WKWebView新浪充值页面键盘点击错位问题)