【问题标题】:UITableView doesn't reload properly on iOS 7.1UITableView 在 iOS 7.1 上无法正确重新加载
【发布时间】:2014-12-09 13:10:05
【问题描述】:

我有一个UIViewController,其中有一个UITableView 和一个UISegmentedControl,其中有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 上。

【问题讨论】:

  • 您是否尝试仅重新加载一个单元格,而不是使用 reloadRowsAtIndexPaths:withRowAnimation: 重新加载整个表格?

标签: objective-c uitableview ios7


【解决方案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 个部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多