我试图在用户看到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方法放在最后,但它也没有用。我不认为这只是一个安置问题,我认为还有一些我需要补充的内容,但还没有人提供任何帮助。
答案 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)
}