UITableView无法在iOS 7.1上正确重新加载

时间:2014-12-09 13:10:06

标签: objective-c uitableview ios7

我有一个UIViewController,其中包含UITableViewUISegmentedControl,其中包含4个细分。每次用户点击不同的段时,表视图中显示的单元格类型应该更改。为此,我有以下代码:

- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender {
    [self.tableView reloadData];
}

通常,第三个段使用最大数量的单元格填充表视图。所以,在第三段时,当我滚动到表格底部然后切换到另一个段时,我希望表格视图只是重新加载其单元格并保持在相同的滚动位置。然而,发生的情况是标题视图似乎位于屏幕的底部,就像表视图滚动到顶部到其极限一样。然后,当我触摸并再次开始滚动时,事情就会恢复正常,好像桌子只是向下滚动并且细胞出现一样。

我一直试图解决这个问题一段时间了,到目前为止我看过的帖子都提出了同样的建议。他们说,如果动画是在主线程的其他线程中处理的,那么这类问题是不可避免的。所以我尝试修改如下代码:

- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
}

- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender {
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [self.tableView reloadData];
    }];
}

他们都没有工作。我也尝试在重新加载bu之后以编程方式滚动表视图,这似乎也不起作用。

任何人都有任何其他想法可能会发生这种情况?我应该注意,这个问题只发生在iOS 7.1上。

1 个答案:

答案 0 :(得分:1)

根据我的理解,当你从具有最大数量结果的分段控制索引过滤器转换时,你只会遇到问题。

当您尝试在重新加载后以编程方式滚动表视图时,您是否计算了分段控件1或2的目标结果集的索引路径?

示例:

如果我们从segmentedControlIndex 3转移到1,其中3有30条记录,1有10条记录:

[self.tableView reloadData]
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:10 inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath
                atScrollPosition: UITableViewScrollPositionBottom
                        animated:YES];

以上假设您有1个部分。