我已经创建了一个视图控制器,并添加了一个表视图作为子视图来显示我从web服务异步获取的数据。最初,视图显示一个空表。获取数据后,对其进行排序,然后将其存储在保存表视图数据的数组中。我在tableView上调用reloadData,数据就正确显示了。在这个时刻,表视图按照它应该的方式工作(滚动按预期工作)。然而,只要我点击一个单元格,它带我到一个详细视图控制器(模态呈现),当我返回表视图滚动到顶部时,滚动被禁用(内容仍然反弹)。数据仍然在那里,如果我拖上表格单元格,更多的显示,但一旦我放开,就会从屏幕上弹回来。
使问题更加复杂的是,我的自定义分屏视图控制器用于更改表视图中显示的内容。它通过手势显示和隐藏自己,按下其中的一个对象将重新获取主表视图中的数据。当服务完成数据加载并且表数据已经刷新时,表将按照预期再次滚动。
该应用仅支持iOS 6.0及以上版本的手机设备类型。
下面是一些从web服务检索数据的代码:
- (BOOL) getPatientVisits {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSDictionary *response = [[HMWebServiceFacade defaultFacade] getVisitListingForPatientId:appDelegate.selectedPatientId withUserCredential:appDelegate.usernamePasswordHash];
dispatch_async(dispatch_get_main_queue(), ^{
if ([[response objectForKey:@"status"] isEqualToString:@"OK"])
{
patientVisits = [[HMCommonUtils commonUtils] sortedArrayOfVisits:[response objectForKey:@"visits"]];
}
else if ([response objectForKey:@"RequestError"])
{
[[HMCommonActions standardActions] displayErrorAlertMessage:[response objectForKey:@"RequestError"]];
}
else
{
[[HMCommonActions standardActions] displayErrorAlertMessage:@"There were no visits for your loved one." withTitle:@"Sorry"];
patientVisits = nil;
}
[visitsTable reloadData];
[self viewWillAppear:YES];
});
});
return false;
}
在viewDidLoad中,我调用[self getPatientVisits];
以及在分屏视图中单击任何对象的回调函数。
可以在View的viewDidLoad
方法中设置tableView
的scrollEnabled
属性。
问题出在自动布局和iOS 6的表视图标头上。在- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
中使用约束会导致这种不稳定的行为