ios UITableView reloadData不会增加内容高度

时间:2012-12-12 09:22:36

标签: ios uitableview ios6

我的iOS应用中遇到了一个奇怪的错误,并且无法弄清楚原因。

在我的UITableView中,我可以添加新的单元格,因此我刷新了作为数据源的数组并调用reloadData

一切正常,没有错误。再次调用numberOfRowsInSection,它的值比之前的值多一个。新单元格甚至插入到tableview的底部,但我无法向下滚动到它。我只知道它在那里,因为tableview反弹,我可以看到它。

我猜测tableview的内容高度由于某种原因没有增加,但我不明白为什么。

我正在使用iOS 6顺便说一句。

非常感谢任何帮助! 谢谢,

佐利

编辑,回答Srikanth的问题:

  1. 如何添加数据。
  2. 有一个NSArray包含特定类型的对象。 array.count是单元格数。此NSArray从数据库查询中获取其值。

    1. 当你说,你正在刷新数组时,你是什么意思。
    2. 通过刷新数组,我的意思是我在数据库中执行一个新查询,并将此查询的结果放入NSArray中。这将是tableview的数据源数组。像这样:

      dataSourceArray = [dbManager executeQuery];
      [tableView reloadData];
      
      1. 您是否在同一个视图控制器中添加数据
        1. 你能否展示一些关于你在做什么的代码
        2. 见上文。

          1. 表视图是视图控制器视图的根目录还是在另一个视图中
          2. tableview是主视图的第一个孩子。

            1. 您可以尝试在开头添加数据到数组,以便您可以在顶部查看正在添加的单元格。
            2. 我不明白你的意思。

3 个答案:

答案 0 :(得分:0)

检查你的tableView:heightForRowAtIndexPath:方法。对于新添加的行,此方法可能以某种方式返回零。

答案 1 :(得分:0)

答案是确保在调用tableview的reloaddata之前从数据库中获取新内容。出于某种原因,新内容位于tableview中,但其内容高度较小。我的猜测是在新结果出现在数组之前调用numberOfRowsInSection,但其内容来自带有新数据的数组。但这也没有意义......

但确保使用回调重新加载tableview只是在获取查询完成后解决了问题。

答案 2 :(得分:0)

我遇到了同样的问题,我能够使其表现正常的唯一方法就是不使用reloadData,而是重新加载所有部分(归结为同样的事情,但显然不是在内部UITableView contentSize重新计算)。

无论如何,当你的模型被加载时,不要做[self.myTableView reloadData],而是调用它:

-(void)reloadDataWithAnimation {
    [self.myTableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.myTableView.numberOfSections)] withRowAnimation:UITableViewRowAnimationTop];
}

动画不是必需的,我只是需要它看起来那样。