出现键盘时的 tableView 与 scrollView 行为

tableView vs. scrollView behavior when keyboard appears

如果文本字段打开键盘并且文本字段是 tableView 的成员,那么它将能够滚动 tableView 以能够看到最后一个项目,并且键盘不会隐藏该项目。

怎么样? UITableView 继承自 UIScrollView。我想打开键盘会增加内容偏移量?我说的对吗?

如果 textfield 是 scrollView 的一部分,而不是 tableView,则不会出现此效果,并且键盘可以隐藏位于 scrollView 下部的其他控件。

如果我想看到 scrollView 和 tableView 一样的效果,我应该手动设置内容偏移量吗?

是的,您必须手动设置内容偏移量。

首先你注册通知

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name:UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name:UIKeyboardWillHideNotification, object: nil)

然后在你的观察者方法中。

func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

func keyboardWillShow(notification:NSNotification){

    var userInfo = notification.userInfo!
    var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
    keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)

    var contentInset:UIEdgeInsets = self.scrollView.contentInset
    contentInset.bottom = keyboardFrame.size.height
    self.scrollView.contentInset = contentInset
}

func keyboardWillHide(notification:NSNotification){

    var contentInset:UIEdgeInsets = UIEdgeInsetsZero
    self.scrollView.contentInset = contentInset
}

您可以导入从 https://github.com/michaeltyson/TPKeyboardAvoiding 下载的 TPKeyboardAvoiding class 并将 UITableView class 设置为 TPKeyboardAvoidingTableView。