在添加新行后,UITableView scrollToRow不再适用于iOS 11
我注意到一个奇怪的UITableView行为,似乎只发生在iOS 11设备上。
插入一个新行(改变数据源,然后调用reloadData)之后,在调用scrollToRow
或scrollToBottom()
方法时, 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()
希望这有助于。