所以我有一个UITableView,当键盘出现时我需要滚动到最后一个单元格。目前我正在侦听UIKeyboardDidShow / Hide通知并调整insets的大小以使整个tableView位于键盘上方,并且我尝试向下滚动它。如果tableView在键盘出现时处于最顶端,则滚动工作,但如果它在列表中间或底部的某处滚动,则它不会一直向下滚动并且变得混乱(我无法滚动)过了某一点,一般来说只是一种笨拙的。)
以下是显示键盘时运行的代码:
func keyboardShown(notification: NSNotification) {
// changes the content insets of the tableView to be above the keyboard
let keyboardSize = notification.userInfo![UIKeyboardFrameBeginUserInfoKey]?.CGRectValue().size
var contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardSize!.height, right: 0.0)
var rate: NSTimeInterval = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey]!.doubleValue
UIView.animateWithDuration(rate, animations: {
self.commentsTableView.contentInset = contentInsets
self.commentsTableView.scrollIndicatorInsets = contentInsets
}, completion: { (value: Bool) in
// scrolls to bottom
self.scrollToBottom()
})
}
这是实际滚动的方法:
func scrollToBottom() {
// scrolls to bottom
let rect = CGRect(x: 0.0, y: commentsTableView.contentSize.height - commentsTableView.bounds.size.height, width: commentsTableView.bounds.size.width, height: commentsTableView.bounds.size.height)
commentsTableView.scrollRectToVisible(rect, animated: true)
}
有没有人知道更好的方法来实现这一点,或者看到我当前实现的任何问题?
答案 0 :(得分:0)
我建议您不要在案例中更改表格的contentInset
。相反,更改表格的高度,例如当调用你的keyboardShown
函数时,从表格的高度切割高度等于键盘的高度,当键盘消失时,执行相反的操作。祝你好运!
答案 1 :(得分:-1)
这种方法适合我:
NSIndexPath* ipath = [NSIndexPath indexPathForRow: [dataSourceArray count]-1 inSection:0];
[tableView scrollToRowAtIndexPath: ipath atScrollPosition: UITableViewScrollPositionTop animated: YES];
您可以使用滚动位置来获取您正在寻找的效果,这会告诉表格滚动到最后一个单元格而不是特定的CGRect。