我遇到了关于UISearchDisplayController
表格视图的这个奇怪的错误,该错误只发生在iOS 6中。我刚刚在一个nib文件中创建了我的tableview,然后以编程方式在上面添加了一个搜索栏它和一个搜索显示控制器来过滤表视图中的数据:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.mpSearchBar = [[MPSearchBar alloc] initWithFrame:CGRectMake(0, 0, 250, 44)];
self.mpSearchBar.placeholder =@"Card Search";
self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.mpSearchBar contentsController:self];
self.searchController.delegate = self;
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.resultTableView.delegate = self;
self.resultTableView.dataSource = self;
[self.resultTableView reloadData];
}
当我第一次在搜索栏中输入一些查询时,搜索显示控制器会过滤数据,控制器的结果表视图正常工作。但是,当我点击搜索栏中的清除按钮并键入其他内容时,包含新的过滤数据集的结果表视图无法长时间滚动。奇怪的是,当我尝试记录表格视图的frame
和contentSize
时,内容大小高度大于帧高度,因为它应该是:
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
tableView.scrollIndicatorInsets = UIEdgeInsetsZero;
tableView.contentInset = UIEdgeInsetsZero;
[tableView hideEmptySeparators];
if (IOS_EQUAL_OR_NEWER_THAN_7){
tableView.separatorInset = UIEdgeInsetsZero;
}
NSLog(@"Frame height %f, Content height %f", tableView.frameHeight, tableView.contentSize.height);
}
这就是我从日志中得到的:
框架高度504.000000,内容高度1402.000000
只有当我在iOS 6设备上进行测试时才会发生这种情况,我不知道如何调试此问题。
请建议并谢谢。
答案 0 :(得分:2)
原来这是iOS 6中UISearchController
的表格视图的一个(不太好)已知问题。我的临时解决方案是从contentSize
获取willShowSearchResultsTableView
和以编程方式将其设置为viewDidLayoutSubviews
中的表视图:
- (void) viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if ([self.searchController isActive]){
// fix wrong content size due to search bar glitch in iOS 6
self.searchController.searchResultsTableView.contentSize = newContentSize;
}
}
希望这有助于遇到与我相同问题的任何人。