Ключом к решению этой проблемы было выяснение того, когда следует изменить геометрию табличного представления. Вызов:
[self.searchDisplayController.searchResultsTableView setFrame:someframe];
после создания UISearchDisplayController было бесполезно. Ответ был такой метод делегата:
-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
tableView.frame = someframe;
}
Заметьте, я тоже пробовал -searchDisplayController:didLoadSearchResultsTableView
, но там это не помогло. Вы должны подождать, пока он не отобразится, чтобы изменить его размер.
Также обратите внимание, что если вы просто назначите tableView.frame = otherTableView.frame
, таблица результатов поиска будет перекрывать соответствующую панель поиска, поэтому очистить или отменить поиск невозможно!
Мой окончательный код выглядел так:
-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView {
CGRect f = self.masterTableView.frame; // The tableView the search replaces
CGRect s = self.searchDisplayController.searchBar.frame;
CGRect newFrame = CGRectMake(f.origin.x,
f.origin.y + s.size.height,
f.size.width,
f.size.height - s.size.height);
tableView.frame = newFrame;
}