关闭另一个视图后 UITableView 滚动内容大小不正确

Posted

技术标签:

【中文标题】关闭另一个视图后 UITableView 滚动内容大小不正确【英文标题】:UITableView scroll content size incorrect after dismissing another view 【发布时间】:2013-04-04 13:46:10 【问题描述】:

所以我有一个UITableViewController,它会启动另一个tableVC,它会在关闭时更改原始单元格的数量。

在关闭时,尽管返回了正确的单元格高度(和标题高度)以及更新的行数(使得滚动内容很大),但滚动视图仅在滚动时反弹。查看表格滚动的contentSize 属性,contentSize 不正确,与之前的相同。

最初加载原始tableVC 时,我没有遇到问题。如果我有大量单元格,表格将按预期滚动。只有在解雇提出的tableVC 时,我才会遇到问题。我不确定的一件事是何时调用 reloadData。我这样做如下:

1。在提交tableVC

[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil]

2。在原始表VC中:

-(void)viewDidAppear    
 
   //tablecell number manipulated
   [table reloadData];


有趣的是,如果我旋转到横向并返回到纵向,那么 contentSize 设置正确,我可以再次滚动。

【问题讨论】:

刚刚遇到这个,viewDidAppear 是不是打错字了——你没有正确复制代码吗? 【参考方案1】:

添加一个

[table setNeedsDisplay]; 

另外,您不制作动画是否有特殊原因?

【讨论】:

似乎不起作用。我也按照同样的思路尝试了 setNeedsLayout。 加回动画怎么样? 在我的真实代码中实际上是动画的,我这里只是弄错了。我需要动画。 在为表格中的滚动视图计算 contentSize 时,这是与时间相关的问题吗? 我遇到了同样的问题,我有一个动画块,我在其中设置了表 setNeedsDisplay 但没有任何反应。你怎么修好它的。 ***.com/questions/18369449/…【参考方案2】:

我通过显式重新加载该部分而不使用 reloadData 解决了这个问题。 [table reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];

【讨论】:

【参考方案3】:

我遇到了类似的问题。我正在更改静态 tableView 的行数和部分以响应在子 viewController 中输入的数据,但是在内容更新时,contentSize 没有,导致滚动问题。

在我的情况下,ios6 中的reloadData 中似乎存在一个错误,导致 tableView 无法正确计算新大小(这在 iOS7 中运行良好)。我通过在行和节上调用适当的插入和删除来解决这个问题,详情如下:UITableView won't reload contentSize。

【讨论】:

以上是关于关闭另一个视图后 UITableView 滚动内容大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

滚动关闭和打开后,视图重新出现在 UITableViewCell 中

将 superView 拖到某个阈值后启用滚动 UITableView

滚动到 UITableView 框架之外

呈现另一个视图控制器将 UITableView 滚动到顶部

UITableView 和 ScrollView 中的另一个视图

使用 UITableView 在 UITableView 上自动滚动 UIImageView