WKWebView 在显示键盘时,默认会自动调整内容插入(adjustedContentInset),以确保网页内容不会被键盘遮挡。如果你希望在键盘显示时禁用这种自动调整,可以通过以下步骤实现:
要禁用WKWebView在键盘显示时的自动调整内容插入,可以通过监听键盘事件并手动设置WKWebView的contentInset
和scrollIndicatorInsets
属性来实现。
contentInset
和scrollIndicatorInsets
设置为不考虑键盘的高度。import UIKit
import WebKit
class ViewController: UIViewController {
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// 初始化WKWebView
webView = WKWebView(frame: self.view.frame)
self.view.addSubview(webView)
// 加载网页
let url = URL(string: "https://example.com")!
let request = URLRequest(url: url)
webView.load(request)
// 注册键盘事件监听
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(_ notification: Notification) {
// 获取键盘高度
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
// 设置WKWebView的contentInset和scrollIndicatorInsets,忽略键盘高度
webView.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
webView.scrollView.scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
}
@objc func keyboardWillHide(_ notification: Notification) {
// 恢复默认的contentInset和scrollIndicatorInsets
webView.scrollView.contentInset = UIEdgeInsets.zero
webView.scrollView.scrollIndicatorInsets = UIEdgeInsets.zero
}
deinit {
// 移除监听器
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
}
通过上述方法,你可以有效地控制WKWebView在键盘显示时的行为,从而提供更符合设计预期的用户体验。
领取专属 10元无门槛券
手把手带您无忧上云