我有一个 View Controller ,其中有 表格 View 和表格下方的textView
当我点击 textView 时,键盘出现,当我点击 textView 外部时,键盘消失 这工作正常,但我有一个问题,当我拖动(向下滚动)表格 View 时,textView 不会随着键盘向下移动,我看到键盘后面有黑色背景,如下图所示
如何在Swift中解决这个问题
更新: 这是我当前观察 keyboardFrameChanges 的代码
func keyboardFrameChanged(notification: NSNotification) {
let dict = NSDictionary(dictionary: notification.userInfo!)
let keyboardValue = dict.objectForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue
let bottomDistance = mainScreenSize().height - keyboardValue.CGRectValue().origin.y
let duration = Double(dict.objectForKey(UIKeyboardAnimationDurationUserInfoKey) as! NSNumber)
UIView.animateWithDuration(duration, animations: {
self.inputViewConstraint!.constant = -bottomDistance
self.view.layoutIfNeeded()
}, completion: {
(value: Bool) in
self.chatTableView.scrollToBottom(animation: true)
})
}
更新 2: 我通过将 keyboardDismissMode 从 Interactive 更改为 OnDrag
找到了解决方案chatTableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.OnDrag
一旦观察到表格中的任何拖动运动,这将立即将键盘和 textView 向下移动,但是如何在 whatsapp 聊天 View 中的 Interactive 模式下执行此操作
最佳答案
- 将 ScrollView (UITableView 或 UICollectionView)框架设置为与 UIViewController 框架相同
- 将
.interactive
设置为 ScrollView 的keyboardDismissMode
- 覆盖
canBecomeFirstResponder
并返回true
- 在屏幕底部设置带有 UITextField 或 UITextView 的输入容器
- 覆盖
inputAccessoryView
并返回输入容器 - 享受
看我的简单代码here on github
如果您为输入 View 实现自己的底部约束
并更改其在键盘框架通知上的常量。使用这些代码行,将修复动画结束时预测栏布局的错误。
override var inputAccessoryView: UIView? {
return UIView()
}
override var canBecomeFirstResponder: Bool {
return true
}
关于ios - 滚动表格时如何将inputView移动到键盘上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209543/