在ViewController加载之前滚动到TableView的底部

时间:2018-03-23 05:43:55

标签: ios swift tableview

我试图在用户看到TableView之前让我的TableView滚动到底部。现在,我已将其设置为当页面加载时,用户会看到TableView,然后立即看到它滚动到底部。我需要它预先在底部,所以用户不必看到它滚动。有谁知道怎么做?

class ChatViewController: UIViewController, CNContactPickerDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource, UIToolbarDelegate, UITextFieldDelegate, UITextViewDelegate {

    func scrollToBottom() {
        let numberOfSections = self.chatTableView.numberOfSections
        let numberOfRows = self.chatTableView.numberOfRows(inSection: numberOfSections-1)
        let indexPath = IndexPath(row: numberOfRows-1 , section: numberOfSections-1)

        self.chatTableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: true)
    }

    override func viewDidAppear(_ animated: Bool) {
        scrollToBottom()
    }
}

编辑1: 只是为了让你知道我尝试了什么,我在viewWillAppear而不是viewDidLoad中运行了该方法,但这给了我一个错误。我认为它与numberOfRows是动态的并且表尚未加载有关。我尝试将动画设置为false,但这只是让用户看到页面快速跳转,他们仍然看到动作。我尝试将该方法放在celForRow中,因此它可能在获取消息后运行,但这不起作用。我有一个方法从数据库中检索消息,我尝试将我的scrollToBottom方法放在最后,但它也没有用。我不认为这只是一个安置问题,我认为还有一些我需要补充的内容,但还没有人提供任何帮助。

1 个答案:

答案 0 :(得分:0)

这样做,

viewWillAppear

中调用您的方法
override func viewWillAppear(_ animated: Bool) {
 super.viewWillAppear(true)
    scrollToBottom()
}

//在false

中将动画设为scrollToRow
func scrollToBottom() {

    let numberOfSections = self.chatTableView.numberOfSections
    let numberOfRows = self.chatTableView.numberOfRows(inSection: numberOfSections-1)
    let indexPath = IndexPath(row: numberOfRows-1 , section: numberOfSections-1)

    self.chatTableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: false)

}