UITableView 在 iOS 7.1 上无法正确重新加载
Posted
技术标签:
【中文标题】UITableView 在 iOS 7.1 上无法正确重新加载【英文标题】:UITableView doesn't reload properly on 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: 重新加载整个表格? 【参考方案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 个部分。
【讨论】:
以上是关于UITableView 在 iOS 7.1 上无法正确重新加载的主要内容,如果未能解决你的问题,请参考以下文章
iOS 7.1 中未显示 UITableView 选定的单元格分隔符
UISearchBar 在 iOS 7.1 上添加到 UITableViewCell 时会更改其超级视图
Jenkins 生成的 ipa 无法在 iPhone 上安装(iOS 9 + XCode 7.1)
升级到 iOS 9 和 MobileFirst 7.1 后无法登录设备或模拟器上的应用程序