Если ваше требование, чтобы перейти к последнему cell
из tableView
вы можете использовать setContentOffset
, как это так, что вы можете перейти к последней ячейке tableView
.
let scrollPoint = CGPoint(x: 0, y: self.tableView.contentSize.height - self.tableView.frame.size.height)
self.tableView.setContentOffset(scrollPoint, animated: true)
Это было сочетание ответов. Я в конечном итоге делает это:
Поместите это в reloadData() функция:
func reloadData(){
chatroomTableView.reloadData()
dispatch_async(dispatch_get_main_queue(), {() -> Void in
let scrollPoint = CGPoint(x: 0, y: self.chatroomTableView.contentSize.height - self.chatroomTableView.frame.size.height)
self.chatroomTableView.setContentOffset(scrollPoint, animated: true)
})
}
Добавлено это мой UITableViewDelegate:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let lastRowIndex = tableView.numberOfRowsInSection(0)
if indexPath.row == lastRowIndex - 1 {
tableView.scrollToBottom(true)
}
}
Добавлено этом в нижней части моего файла .swift :
extension UITableView {
func scrollToBottom(animated: Bool = true) {
let sections = self.numberOfSections
let rows = self.numberOfRowsInSection(sections - 1)
if (rows > 0){
self.scrollToRowAtIndexPath(NSIndexPath(forRow: rows - 1, inSection: sections - 1), atScrollPosition: .Bottom, animated: true)
}
}
}
Имеет ли 'rows' и' sections' ожидаемое значение в вашей функции 'scrollToBottom', когда оно ' называется? – rmaddy
Да, строки = 36 и разделы = 1. Но он только прокручивается до строки 10 раздела 0. –
Попробуйте обернуть свой вызов 'scrollToBottom' внутри' dispatch_async' или, может быть, 'dispatch_after'. – rmaddy