Запретить UISearchDisplayController показывать пустые ячейки

Я реализовал UISearchDisplayController для довольно стандартного табличного представления (тот же источник данных для таблицы + поиска). Проблема, с которой я сталкиваюсь, заключается в том, что когда результаты не заполняют экран, под фактическими результатами есть «псевдо» строки.

Мне удалось установить цвет фона, но я не могу найти хороший способ подавить эти строки/разделители. Они кажутся отделенными от моего ответа numberOfRowsInSection: делегировать.

Если я установлю searchResultsTableView.separatorColor (зеленый), он изменит только фактические строки результатов.

Мне удалось изменить separatorStyle на UITableViewCellSeparatorNone, но тогда мне пришлось вручную воссоздавать разделители фактических результатов, и есть крайние случаи (например, цвет выделения закрывает мое представление).

Есть ли чистый способ скрыть строки, указанные на прикрепленном снимке экрана?

введите здесь описание изображения


person owenfi    schedule 06.12.2013    source источник
comment
К вашему сведению. Решение такое же, как и для любого табличного представления. Это нахождение в контроллере поиска не имеет значения.   -  person rmaddy    schedule 07.12.2013
comment
Хм. В моих обычных табличных представлениях не отображаются такие дополнительные ячейки. Отличается ли поведение по умолчанию (или searchTableViews не наследуют некоторую конфигурацию, как обычные табличные представления из раскадровки)?   -  person owenfi    schedule 07.12.2013
comment
Любой стандартный UITableView в простом стиле будет отображать пустые строки под вашей последней фактической строкой, если ваши реальные строки не заполняют экран.   -  person rmaddy    schedule 07.12.2013


Ответы (1)


Вероятно, вы можете реализовать этот метод делегата для контроллера отображения поиска:

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView;
{
    UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 1)];
    footer.backgroundColor = [UIColor clearColor];
    [tableView setTableFooterView:footer];
}

Это заставит последние несколько строк исчезнуть. Вы, конечно, можете сделать это любым другим способом, который вы выберете. Например, вы можете сделать это в viewDidLoad UIViewController, если хотите получить такой же эффект в обычном UITableView.

person Ethan Mick    schedule 06.12.2013
comment
Мне нравится этот путь... Спасибо! - person Hani Ibrahim; 07.12.2013
comment
Последняя проблема заключается в том, что последний разделитель строк (между фактическими строками и фоном) теперь темпераментный. Он не отображается при первой загрузке, но отображается, если я выделю, а затем отменю выбор или выберу и коснусь назад. - person owenfi; 07.12.2013
comment
Похоже, это может быть проблема с вашими пользовательскими ячейками или каким-то другим кодом. - person Ethan Mick; 07.12.2013