ios - 滚动表格时如何将inputView移动到键盘上方

标签 ios swift keyboard

我有一个 View Controller ,其中有 表格 View 和表格下方的textView

当我点击 textView 时,键盘出现,当我点击 textView 外部时,键盘消失 这工作正常,但我有一个问题,当我拖动(向下滚动)表格 View 时,textView 不会随着键盘向下移动,我看到键盘后面有黑色背景,如下图所示

keyboard disappear with 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 模式下执行此操作

最佳答案

  1. 将 ScrollView (UITableView 或 UICollectionView)框架设置为与 UIViewController 框架相同
  2. .interactive 设置为 ScrollView 的 keyboardDismissMode
  3. 覆盖canBecomeFirstResponder并返回true
  4. 在屏幕底部设置带有 UITextField 或 UITextView 的输入容器
  5. 覆盖inputAccessoryView并返回输入容器
  6. 享受

看我的简单代码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/

相关文章:

ios - 通过使用由字符串分隔的组件从 url 获取值

ios - iPad Pro 的平台字符串

Swift,如何在按下按钮时播放声音

ios - 如果我使用两个文本字段,如何设置键盘

iphone - 根据键盘和预测 TextView iOS 8 向上或向下移动我的工具栏

eclipse - ALT+CMD+R 停止工作

ios - 如何在webview中加载html代码?

iphone - 在 Core Graphics 中绘制圆圈 - 为什么这不起作用?

objective-c - Objective-C 中的枚举定义形式

Swift 为默认返回值生成错误