UITableView,重新加载滚动到底部?

我有一个UITableView与dynamic更新的cells 。 除了调用tableview.reload (见下面)来刷新表格中的cells时,一切正常,我希望表格滚动到底部以显示新条目。

 - (void)reloadTable:(NSNotification *)notification { NSLog(@"RELOAD TABLE ..."); [customTableView reloadData]; // Scroll to bottom of UITable here .... } 

我打算使用scrollToRowAtIndexPath:atScrollPosition:animated:但后来注意到我没有访问indexPath

有谁知道如何做到这一点,或者我可以使用delegatecallback?

使用:

 NSIndexPath* ipath = [NSIndexPath indexPathForRow: cells_count-1 inSection: sections_count-1]; [tableView scrollToRowAtIndexPath: ipath atScrollPosition: UITableViewScrollPositionTop animated: YES]; 

或者您可以手动指定节索引(如果一节=>索引= 0)。

 -(void)scrollToBottom{ [self.tableView scrollRectToVisible:CGRectMake(0, self.tableView.contentSize.height - self.tableView.bounds.size.height, self.tableView.bounds.size.width, self.tableView.bounds.size.height) animated:YES]; } 

另一种解决scheme是垂直翻转桌子,并垂直翻转每个单元格:

初始化时将转换应用于UITableView:

 tableview.transform = CGAffineTransformMakeScale(1, -1); 

并在cellForRowAtIndexPath:

 cell.transform = CGAffineTransformMakeScale(1, -1); 

这样您就不需要解决滚动问题的解决方法,但是您需要考虑一下有关contentInsets / contentOffsets和页眉/页脚交互的问题。

 //In swift var iPath = NSIndexPath(forRow: self.tableView.numberOfRowsInSection(0)-1, inSection: self.tableView.numberOfSections()-1) self.tableView.scrollToRowAtIndexPath(iPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true) 

这是另一个解决scheme,在我的情况下,单元格高度大的时候效果很好。

 - (void)scrollToBottom { CGPoint bottomOffset = CGPointMake(0, _bubbleTable.contentSize.height - _bubbleTable.bounds.size.height); if ( bottomOffset.y > 0 ) { [_bubbleTable setContentOffset:bottomOffset animated:YES]; } } 

由于这是你可能想经常使用的东西,我build议你在UITableView上创build一个类扩展:

 extension UITableView { func scrollToBottom(animated: Bool = true) { let section = self.numberOfSections if section > 0 { let row = self.numberOfRowsInSection(section - 1) if row > 0 { self.scrollToRowAtIndexPath(NSIndexPath(forRow: row - 1, inSection: section - 1), atScrollPosition: .Bottom, animated: animated) } } } } 

扩展最好在UIScrollView而不是UITableView上完成,这样它可以在scrollView,tableView,collectionView(vertical),UIWebView(内部滚动视图)等

 public extension UIScrollView { public func scrollToBottom(animated animated: Bool) { let rect = CGRectMake(0, contentSize.height - bounds.size.height, bounds.size.width, bounds.size.height) scrollRectToVisible(rect, animated: animated) } } 

这是最好的方法。 – (void)scrollToBottom {CGFloat yOffset = 0;

 if (self.tableView.contentSize.height > self.tableView.bounds.size.height) { yOffset = self.tableView.contentSize.height - self.tableView.bounds.size.height; } [self.tableView setContentOffset:CGPointMake(0, yOffset) animated:NO]; 

}