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];

}
Другие вопросы по тегам