Дополнительные ячейки видны после результатов UISearchDisplayController
У меня есть iOS 7 UITableView, заполненный базой данных CoreData; это работает отлично. Я добавил UISearchDisplayController, который ищет в базе данных; это работает хорошо, за исключением небольшого случая, когда поиск будет отображать только несколько результатов (меньше, чем число, которое может поместиться на экране). В этом случае я получаю дополнительные пустые ячейки, которые не прокручиваются ниже моих результатов. Вот пример:
Ширина разделителя между линиями без прокрутки, кажется, определяется настраиваемой шириной "Вставок разделителя" в опциях 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 ответ
Попробуй это,
Раскадровка -> Просмотр таблицы -> Инспектор атрибутов -> Стиль -> Сгруппированный