reloaddata使表视图的位置出错

时间:2016-06-15 05:49:08

标签: ios

我有一个表视图,它将计算cellForRowAtIndexPath中每个单元格的高度,而heightForRowAtIndexPath将使用该结果。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
            static NSString *CellIdentifier = @"PhotoCell";
            UITableViewCell *sectionHeaderView = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
            if (sectionHeaderView == nil) 
    {
                sectionHeaderView = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];

    }
//setting up the cell 
and also calculate the total height required for this cell and save to _eachcellheight
}

它是细胞的一部分。

- (void)viewWillAppear:(BOOL)animated {
 CGPoint offset = tableView.contentOffset;
    [tableView reloadData];
    [tableView setContentOffset:offset];
}

在视图中会出现,我需要重新加载表中的数据。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
   return _eachcellheight; //option 1
   return 200; //option 2
}

现在的问题是,如果使用选项1,开头的表格显示会很好但是在表格的reloaddata偏移后会变得很奇怪并且滚动变得很奇怪。

但是使用选项2为每个选项返回200.f,reloaddata工作正常,它可以保持与以前相同的位置。 但是桌子必须有不同的牢房高度。

我该如何解决? 我已经解决了这个问题三天了。

1 个答案:

答案 0 :(得分:0)

因为在heightForRowAtIndexPath之前调用了cellForRowAtIndexPath。将您的身高计算逻辑移到heightForRowAtIndexPath而不是cellForRowAtIndexPath,它会正常工作。表视图在实际创建单元格之前需要知道每个单元格的高度。