Ios Messaging app,如何控制键盘

时间:2016-03-16 14:28:01

标签: ios swift uitableview keyboard

我已经开发了我的应用程序。当用户点击文本字段时,键盘弹出,包含消息的表格视图向上移动,但表格视图的顶部不可见,因为它不在屏幕上。当用户向上或向下移动键盘建议时,它还具有将屏幕变黑的不良效果

altitude

如何控制tableview,文本字段和键盘的显示?

修改

期望的行为。 从一开始

  • 我希望视图键盘折叠(正常工作)
  • 显示消息的表格视图(正常工作)
  • 屏幕底部的
  • 和ta文本字段(正常工作)

点击文字字段时

  • 键盘弹出(工作)
  • 文本字段移至键盘顶部(正常工作)
  • 表格视图显示在文本字段上方的剩余空间中(不工作,它位于文本字段上方,但一半是屏幕溢出到顶部)

其他错误

  • 在显示/隐藏键盘顶部的自动完成单词时,屏幕变黑。

2 个答案:

答案 0 :(得分:0)

尝试使用键盘。

-viewDidLoad()

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
view.addGestureRecognizer(tap)

func dismissKeyboard(){
    view.endEditing(true)
}

答案 1 :(得分:0)

我找到了解决方案,它对我有用。

请检查您的项目。 (Eendje的解决方案)

Resize the screen when keyboard appears

您可以创建表格视图底部自动布局约束的插座。

然后只需使用此代码:

func keyboardWillShow(sender: NSNotification) {
    let info = sender.userInfo!
    var keyboardSize = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue().height
    bottomConstraint.constant = keyboardSize - bottomLayoutGuide.length

    let duration: NSTimeInterval = (info[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue

    UIView.animateWithDuration(duration) { self.view.layoutIfNeeded() }
}

func keyboardWillHide(sender: NSNotification) {
    let info = sender.userInfo!
    let duration: NSTimeInterval = (info[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
    bottomConstraint.constant = 0

    UIView.animateWithDuration(duration) { self.view.layoutIfNeeded() }
}

如果您在创建底部约束时遇到问题:

在故事板中

选择搜索栏。 在右下角的角落,你会看到3个图标。点击中间的| - [] - |。 在弹出窗口的顶部,有4个框。在底部的一个输入0。 约束创建了! 现在,您可以将其拖动到视图控制器并将其添加为插座。

另一种解决方案是设置tableView.contentInset.bottom。但我以前没有这样做过。如果您愿意,我可以尝试解释一下。

使用插入:

func keyboardWillShow(sender: NSNotification) {
    let info = sender.userInfo!
    var keyboardSize = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue().height

    tableView.contentInset.bottom = keyboardSize
}

func keyboardWillHide(sender: NSNotification) {
    tableView.contentInset.bottom = 0
}

您可以尝试使用此代码设置插图。我自己还没试过,但它应该是那样的。

我使用约束解决方案解决了我的问题。