除了调整insets大小之外,还可以将UITableView滚动到底部

时间:2014-12-12 01:54:04

标签: ios uitableview swift scroll

所以我有一个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)
    }

有没有人知道更好的方法来实现这一点,或者看到我当前实现的任何问题?

2 个答案:

答案 0 :(得分:0)

我建议您不要在案例中更改表格的contentInset。相反,更改表格的高度,例如当调用你的keyboardShown函数时,从表格的高度切割高度等于键盘的高度,当键盘消失时,执行相反的操作。祝你好运!

答案 1 :(得分:-1)

这种方法适合我:

NSIndexPath* ipath = [NSIndexPath indexPathForRow: [dataSourceArray count]-1 inSection:0];
[tableView scrollToRowAtIndexPath: ipath atScrollPosition: UITableViewScrollPositionTop animated: YES];

您可以使用滚动位置来获取您正在寻找的效果,这会告诉表格滚动到最后一个单元格而不是特定的CGRect。