Дополнительные ячейки видны после результатов UISearchDisplayController

У меня есть iOS 7 UITableView, заполненный базой данных CoreData; это работает отлично. Я добавил UISearchDisplayController, который ищет в базе данных; это работает хорошо, за исключением небольшого случая, когда поиск будет отображать только несколько результатов (меньше, чем число, которое может поместиться на экране). В этом случае я получаю дополнительные пустые ячейки, которые не прокручиваются ниже моих результатов. Вот пример:

UISearch Weirdness

Ширина разделителя между линиями без прокрутки, кажется, определяется настраиваемой шириной "Вставок разделителя" в опциях storybord для моего представления таблицы, поэтому я знаю, откуда они, я просто не знаю как остановить их появление В моей раскадровке для содержимого представления таблицы установлено значение "Динамические прототипы" с одной ячейкой-прототипом. Я также прикрепил строку поиска с областью к своему виду таблицы в раскадровке.

Вот часть кода, который я использую для управления поисковым взаимодействием.

#pragma mark - Search
// This gets called when you start typing text into the search bar
-(BOOL)searchDisplayController:(UISearchDisplayController *)_controller shouldReloadTableForSearchString:(NSString *)searchString {
    self.searchString = searchString;
    self.fetchedResultsController = nil;

    [self setFetchedResultsControllerWithContext:self.managedObjectContext andPredicate:[self searchPredicateGenerator]];

    return YES;
}

// This gets called when you change the search bar scope
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
    self.searchBar.selectedScopeButtonIndex = searchOption;
    self.fetchedResultsController = nil;

    [self setSearchBarPlaceholdersForCase:searchOption];

    [self setFetchedResultsControllerWithContext:self.managedObjectContext andPredicate:[self searchPredicateGenerator]];

    return YES;
}

// To generate search predicates
-(NSPredicate *)searchPredicateGenerator {
    return [NSPredicate predicateWithFormat:[NSString stringWithFormat: @"%@ AND ((title CONTAINS[cd] \"%@\") OR (descriptionText CONTAINS[cd] \"%@\"))",
                                             [self stringPredicateForCase:self.searchBar.selectedScopeButtonIndex],
                                             self.searchString,
                                             self.searchString ]];
}

// This gets called when you cancel or close the search bar
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{
    self.searchString = nil;
    self.fetchedResultsController = nil;

    [self setFetchedResultsControllerWithContext:self.managedObjectContext andPredicate:self.filterPredicate];
}

// to tell the search controller which cells to use here
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
    [tableView registerClass:[TWLTableCell class]  forCellReuseIdentifier:@"MarkIdentifier"];
    tableView.rowHeight = TWLTABLE_ROW_HEIGHT; // or some other height
}

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

1 ответ

Решение

Попробуй это,

Раскадровка -> Просмотр таблицы -> Инспектор атрибутов -> Стиль -> Сгруппированный

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