【发布时间】: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