为什么UITableView的内容大小会发生变化

时间:2017-03-29 04:14:38

标签: ios swift uitableview uiscrollview

我有一个UITableView,我将数据加载到3个块中。我加载了最新的10条记录,当用户使用UIRefreshControl上拉时,我加载前面的10条并显示上一条块的最后一行。我在从数据库

加载新集之前存储了以前的内容大小
previousContentSizeHeight = tableView.contentSize.height

然后当数据到来并更新我的数组时,我使用previous来计算表的新内容大小

let difference = tableView.contentSize.height - 
     previousContentSizeHeight - MinimumCellHeight

self.messageTableView.setContentOffset(CGPoint(x: 0, y: difference), animated: false)

这在很大程度上起作用。在加载第一个集合和加载第二个集合时,它在viewDidAppear之后正常运行,但在第三个集合中,它开始改变内容大小。它减少了!我的理解是,如果我向其添加数据(不删除任何内容),内容大小应该只会增长。 我在表格内容大小的代码读数中有多个地方,如此事件:

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    print("tableView.contentSize.height is: \(tableView.contentSize.height)")
}

当我上下滚动时,我看到数量减少,有时会增加和减少 为什么内容大小会发生变化!?

注意:我想坚持使用内容偏移量。我比IndexPath更幸运。

更新#1 @Sohil R. Memon:我试过你的建议。每个截图,我添加了一个print语句,你可以看到viewDidLayoutSubviews仍未执行。我尝试使用self.messageTableView和tableView进行endDisplaying  enter image description here

1 个答案:

答案 0 :(得分:0)

显示单元格并调用didEndDisplaying后,还有更多内容需要处理,当您再次滚动cellForItem次调用时,这会给您不同的尺寸。

为了在显示所有单元格后获得contentSize的{​​{1}},您可以从下面的方法获取它。只需在UITableView课程中编写以下方法。

UIViewController

希望这有帮助!