ios WKWebView如何在显示键盘时禁用adjustedContentInset?

j13ufse2  于 2023-04-27  发布在  iOS
关注(0)|答案(2)|浏览(173)

如果我在显示WKWebView时打开键盘,它会自动将adjustedContentInset添加到ScrollView。但问题是,如果我自己处理键盘,它仍然会添加adjustedContentInset。我该怎么解决这个问题?

v1l68za4

v1l68za41#

如果你从WKWebView中移除处理键盘的观察者,它将停止添加adjustedContentInset:

NotificationCenter.default.removeObserver(self.webView, name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
    NotificationCenter.default.removeObserver(self.webView, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self.webView, name: UIResponder.keyboardWillHideNotification, object: nil)
tzcvj98z

tzcvj98z2#

keyboardWillShowNotification/keyboardWillHideNotification触发时,我在更改Web视图上的自动布局约束时遇到了这个问题。
什么对我起作用:
1.示例化WKWebViewAFTER 在键盘事件上添加观察者。
1.更改自动布局约束后,触发布局阶段。

let notificationCenter = NotificationCenter.default

notificationCenter.publisher(for: UIResponder.keyboardWillShowNotification, object: nil)
  .sink { [weak self] _ in
    self?.attachWebViewToKeyboard()
    self?.view.layoutIfNeeded()
  }
  .store(in: &cancellables)

notificationCenter.publisher(for: UIResponder.keyboardWillHideNotification, object: nil)
  .sink { [weak self] _ in
    self?.attachWebViewToBounds()
    self?.view.layoutIfNeeded()
  }
  .store(in: &cancellables)

webView = WKWebView(frame: .zero)

(我在这里使用合并,但经典的addObserver也可以。
upvoted解决方案也可以工作,但缺点是当<input>元素获得焦点并打开键盘时,它也会禁用自动滚动内容偏移调整。

相关问题