在我的聊天应用程序textFieldDidBeginEditing
中自动添加键盘高度,IQKeyboardManager
但它会将整个屏幕滚动到顶部。我要求只滚动 tableView 的内容。我navigationBar
应该保持在顶部,但使用第三方滚动库(IQKeyboardManager)将所有部分滚动到顶部。那么我怎样才能只滚动tableView
内容呢?
问问题
1148 次
1 回答
1
在你的ChatViewController
你可以禁用IQKeyboardManager
.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
IQKeyboardManager.shared().isEnabled = false
IQKeyboardManager.shared().isEnableAutoToolbar = false
}
当您要像这样离开该视图控制器时,您可以重新启用它。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
IQKeyboardManager.shared().isEnabled = true
IQKeyboardManager.shared().isEnableAutoToolbar = true
}
现在我们禁用了,IQKeyboardManager
我们必须自己管理键盘。
为此,您可以尝试以下方法。
override func viewDidLoad() {
super.viewDidLoad()
prepareTableView()
observeKeyboardEvents()
}
在这里你调用observeKeyboardEvents
方法中的viewDidLoad
方法。
private func observeKeyboardEvents() {
NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification, object: nil, queue: nil) { [weak self] (notification) in
guard let keyboardHeight = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
print("Keyboard height in KeyboardWillShow method: \(keyboardHeight.height)")
self?.tableView.contentInset.bottom = keyboardHeight.height + 8
self?.tableView.scrollIndicatorInsets.bottom = keyboardHeight.height + 8
}
NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: nil) { [weak self] (notification) in
self?.tableView.scrollIndicatorInsets.bottom = 0 + 8
self?.tableView.contentInset.bottom = 0 + 8
}
}
在
observeKeyboardEvents
方法中,您注册此视图控制器以观察键盘Appear
和Disappear
通知并相应地调整您tableView
的contentInset.bottom
。所以我们也应该移除这个视图控制器来停止接收键盘事件通知。为此,您可以尝试以下代码。
deinit {
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
}
希望,这可能对你有所帮助。:)
于 2019-09-14T10:23:23.903 回答