在添加新行后,UITableView scrollToRow不再适用于iOS 11

我注意到一个奇怪的UITableView行为,似乎只发生在iOS 11设备上。

插入一个新行(改变数据源,然后调用reloadData)之后,在调用scrollToRowscrollToBottom()方法时, UITableView将不会滚动到该行。

当在iOS 10或更早版本上做一些事情时,它可以很好地工作,而UITable就像它应该的那样滚动。

谢谢!

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; }); 

加上一个小的延迟正在我的情况。

Swift 4语法中接受的答案

 let deadlineTime = DispatchTime.now() + .seconds(1) DispatchQueue.main.asyncAfter(deadline: deadlineTime) { self.tableView.scrollToRow(at: indexPath, at: .middle, animated: true) } 

不知道如果我遇到的情况适用于这个问题,但我也有一个情况UITableView.scrollTo...开始从iOS 11行为exception。

在我的情况下,我连续调用UITableView.reload...UITableView.scrollTo... 结果是这个命令很重要。

这工作:

 tableView.reloadData() tableView.scrollToRow(at: indexPath, at: .top, animated: true) 

这不:

 tableView.scrollToRow(at: indexPath, at: .top, animated: true) tableView.reloadData() 

希望这有助于。