2016-08-11 4 views
4

У меня есть UITableView, и я пытаюсь загрузить в него 36 строк, а затем прокручивать весь путь до последней ячейки.Прокрутите до конца UITableView

Я попытался это:

func reloadData(){ 
    chatroomTableView.reloadData() 
    chatroomTableView.scrollToBottom(true) 
} 


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) 
     } 
    } 
} 

Но она прокручивается только наполовину.

+0

Имеет ли 'rows' и' sections' ожидаемое значение в вашей функции 'scrollToBottom', когда оно ' называется? – rmaddy

+0

Да, строки = 36 и разделы = 1. Но он только прокручивается до строки 10 раздела 0. –

+0

Попробуйте обернуть свой вызов 'scrollToBottom' внутри' dispatch_async' или, может быть, 'dispatch_after'. – rmaddy

ответ

7

Если ваше требование, чтобы перейти к последнему 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) 
     } 
    } 
} 
Смежные вопросы