【发布时间】:2018-08-06 03:47:00
【问题描述】:
我正在浏览互联网但没有令人满意的结果。我有一个tableView,每当我做reloadData 时,它的偏移量总是不规律地变化。即使表格的内容保持不变,也会发生这种情况。
我使用scrollViewDidScroll 记录了在运行reloadData 时偏移量如何变化。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print ("TABLEVIEW OFFSET : \(scrollView.contentOffset)");
}
我还创建了一个代码来保存 reloadData 之前的旧偏移量,并在延迟后重新设置为新的偏移量。
extension UITableView {
func reloadDataOffset() {
print ("OLD OFFSET : \(self.contentOffset)");
let offset = self.contentOffset;
let oldHidden = self.isHidden;
self.isHidden = true;
self.reloadData();
delay(1) {
self.setContentOffset(offset, animated: false);
self.isHidden = oldHidden;
print ("NEW OFFSET : \(self.contentOffset)");
}
}
}
这是日志中显示的内容。
OLD OFFSET : (0.0, 314.0)
TABLEVIEW OFFSET : (0.0, -64.0)
TABLEVIEW OFFSET : (0.0, 314.0)
TABLEVIEW OFFSET : (0.0, -64.0)
TABLEVIEW OFFSET : (0.0, 753.0)
TABLEVIEW OFFSET : (0.0, 586.0)
TABLEVIEW OFFSET : (0.0, 753.0)
TABLEVIEW OFFSET : (0.0, 706.0)
TABLEVIEW OFFSET : (0.0, 753.0)
TABLEVIEW OFFSET : (0.0, 751.5)
TABLEVIEW OFFSET : (0.0, 750.0)
TABLEVIEW OFFSET : (0.0, 747.5)
TABLEVIEW OFFSET : (0.0, 744.5)
TABLEVIEW OFFSET : (0.0, 741.0)
TABLEVIEW OFFSET : (0.0, 737.5)
TABLEVIEW OFFSET : (0.0, 733.5)
TABLEVIEW OFFSET : (0.0, 729.5)
TABLEVIEW OFFSET : (0.0, 725.5)
TABLEVIEW OFFSET : (0.0, 721.5)
TABLEVIEW OFFSET : (0.0, 717.5)
TABLEVIEW OFFSET : (0.0, 714.5)
TABLEVIEW OFFSET : (0.0, 711.5)
TABLEVIEW OFFSET : (0.0, 709.0)
TABLEVIEW OFFSET : (0.0, 707.5)
TABLEVIEW OFFSET : (0.0, 706.5)
TABLEVIEW OFFSET : (0.0, 706.0)
TABLEVIEW OFFSET : (0.0, 314.0)
NEW OFFSET : (0.0, 314.0)
我这样做(添加延迟)是因为我在某处读到 tableView reloadData 发生在不同的线程中,并且每当 reloadData 完成时我无法准确地获得回调或通知。但这看起来很丑陋。我可以删除isHidden = true 部分,但这会使表格内容看起来跳来跳去。有什么真正的方法可以在 reloadData 完成后立即将偏移量重新设置为旧值?或者,有什么方法可以让滚动偏移在 reloadData 之前/之后保持原位?
【问题讨论】:
-
@matt 即使我把所有的
print都去掉了,结果还是一样,到处乱跳。 -
对于那些因为不清楚而投票结束我的问题的人,我认为我已经在问题标题中尽可能清楚地说明了问题。请告诉我哪一部分不清楚,让我解决。
标签: ios uitableview