UISearchDisplayController Представление таблицы с перекрывающейся панелью поиска
У меня есть UITableViewController
подкласс, отображаемый в модальном виде на iPad. Контроллер вида имеет UISearchDisplayController
подкласс с UISearchBar
включены в заголовок таблицы.
Подкласс UISearchDisplayController
называется NoAnimationSearchDisplayController
и я переопределил - (void)setActive:(BOOL)visible animated:(BOOL)animated
метод, предотвращающий анимацию панели поиска в панели навигации, когда она активна. Переопределение метода ниже...
- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
if (self.active == visible) {
return;
}
[self.searchContentsController.navigationController setNavigationBarHidden:YES animated:NO];
[super setActive:visible animated:animated];
[self.searchContentsController.navigationController setNavigationBarHidden:NO animated:NO];
if (visible) {
[self.searchBar becomeFirstResponder];
} else {
[self.searchBar resignFirstResponder];
}
}
Проблема, с которой я столкнулся, заключается в том, что когда я выполняю поиск и результаты отображаются в виде таблицы контроллера дисплея поиска, все выглядит нормально, пока я не пытаюсь прокрутить список вниз, в этот момент содержимое в ячейках отображается над поиском. панель, как показано на следующем экране:
Панель поиска установлена на UISearchBarStyleMinimal
и прозрачность включена. Может кто-нибудь дать мне знать, как остановить этот контент, перекрывающий панель поиска? В идеале контент исчезнет под строкой поиска, как если бы это был конец представления.
2 ответа
Убедитесь, что панель поиска не включена прозрачно (на раскадровке / XIB) или по коду. Затем сделайте фон белым или любым другим цветом.
Ответ состоял в том, чтобы вручную изменить рамку табличного представления, предоставленного UIsearchDisplayController
в соответствующем методе делегата...
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
/**
* Remove content inset automatically set by UISearchDisplayController as we are forcing the
* search bar to stay in the header view of the table, and not go into the navigation bar.
*/
[tableView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f)];
/**
* Recalculate the bounds of our table view to account for the additional 44 pixels taken up by
* the search bar, but store this in an iVar to make sure we only adjust the frame once. If we
* don't store it in an iVar it adjusts the frame for every search.
*/
if (CGRectIsEmpty(_searchTableViewRect)) {
CGRect tableViewFrame = tableView.frame;
tableViewFrame.origin.y = tableViewFrame.origin.y + 44;
tableViewFrame.size.height = tableViewFrame.size.height - 44;
_searchTableViewRect = tableViewFrame;
}
[tableView setFrame:_searchTableViewRect];
}