当前位置:  开发笔记 > IOS > 正文

使用UITableViewAutomaticDimension时,在UITableView顶部插入行而不修改滚动位置

如何解决《使用UITableViewAutomaticDimension时,在UITableView顶部插入行而不修改滚动位置》经验,为你挑选了1个好方法。

如何UITableView在最顶部插入行而不会导致其余单元格被按下 - 因此滚动位置似乎根本没有变化?

就像Facebook和Twitter在发送新帖子时一样,它们被插入顶部,但滚动位置保持不变.

我的问题类似于这个问题.是什么让我的问题与这个问题的独特之处在于我没有使用具有固定行高的表 - 我正在使用UITableViewAutomaticDimension和一个estimatedRowHeight.因此,建议的答案将无法工作,因为我无法确定行高.

我已经尝试过这个不涉及行高度的解决方案,但contentSize重新加载后仍然不正确,因为该contentOffset集合的相对位置不同 - 单元格仍然被推到插入之前的位置.这是因为单元格尚未在屏幕上呈现,因此iOS无需为它计算适当的高度,直到它即将出现,因此contentSize不准确.

CGSize beforeContentSize = tableView.contentSize;
[tableView reloadData];
CGSize afterContentSize = tableView.contentSize;
CGPoint afterContentOffset = tableView.contentOffset;
tableView.contentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height);

阿兰指出rectForCellAtIndexPath哪个力量iOS要计算合适的高度.我现在可以确定插入单元格的正确高度,但是滚动视图contentSize仍然不正确,正如我遍历所有单元格并加起来大于高度的高度所证明的那样contentSize.height.因此,当我contentOffset手动设置时,它不会滚动到正确的位置.

原始代码:

//update data source
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:newIndexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];

在这种情况下,可以做些什么来实现所需的行为?



1> ZekeMidas..:

晚到派对,但即使单元格具有动态高度(又名UITableViewAutomaticDimension),也不需要迭代单元格来计算它们的大小,但只有在tableView的最开头添加项目并且没有标题时才有效,一点点数学,它可能适应每种情况:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.row == 0 {
            self.getMoreMessages()
        }
}

private func getMoreMessages(){
        var initialOffset = self.tableView.contentOffset.y
        self.tableView.reloadData()
        //@numberOfCellsAdded: number of items added at top of the table 
        self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: numberOfCellsAdded, inSection: 0), atScrollPosition: .Top, animated: false)
        self.tableView.contentOffset.y += initialOffset
}


这是唯一可以帮助我的很多已经存在的解决方案!但是有一个问题:惯性滚动会立即终止.有没有办法保持当前的滚动速度?
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有