【发布时间】:2017-08-22 09:24:24
【问题描述】:
我有一个 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:我试过你的建议。根据屏幕截图,我添加了一条打印语句,您可以看到 viewDidLayoutSubviews 仍未执行。我尝试使用 self.messageTableView 和 tableView 在 endDisplaying
【问题讨论】:
-
您不应该将每个数据提取上的
contentSize设置为yourDataSourceArray.count * minimumCellHeight之类的东西吗? -
@Rikh 如果高度的内容是动态计算的呢?这会导致错误的行为
-
很公平,在这种情况下,您必须根据约束计算最小高度并使用它
标签: ios swift uitableview uiscrollview