AKTUALISIERT WIEDER
Wie sich herausstellt, wenn ein Header der Tabelle im Hintergrund nachgeladen wird es ganz gleich vor dem Suchsteuerung erscheint, was .
Ich löste dies, indem ich den holeResultsController deaktiviere (setze ihn auf Null) und lasse ihn wieder langsam laden, wenn die Suche verschwindet.
AKTUALISIERT - Original Antwort unten
In meinem Fall bin ich mit zwei fetchedResultsControllers eine für die Haupt-Tableview und eine für die Suche.
Ich entdeckte, dass das Verhindern von Animationen beim Hinzufügen der Abschnittsüberschriften diesen Fehler verhindert. Während searchDisplayController.active deaktiviere ich einfach die Animation der Sektionswechsel. Siehe Code unten.
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type
{
if (!self.reordering) {
UITableView *myTableView = controller == __fetchedResultsController ? self.tableView : self.searchDisplayController.searchResultsTableView;
UITableViewRowAnimation animation;
if (self.searchDisplayController.active) {
animation = UITableViewRowAnimationNone;
} else {
animation = UITableViewRowAnimationFade;
}
switch(type)
{
case NSFetchedResultsChangeInsert:
[myTableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:animation];
break;
case NSFetchedResultsChangeDelete:
[myTableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:animation];
break;
}
}
}
ORIGINAL ANTWORT
Die andere Antwort tatsächlich funktioniert nicht auf seine eigene. Der Grund dafür ist, dass der Header, der angezeigt wird, keine Kopfzeile in der Tabellenansicht von searchDisplayController ist. Es handelt sich um eine Kopfzeile aus der Haupttabellenansicht, die aus irgendeinem Grund oberhalb der Suchtabellensicht in der Ansichtshierarchie hinzugefügt wird.
Ich löste dieses Problem, indem ich Updates für die Haupttabelle blockierte, während searchDisplayController.active = YES.
In meinem Fall ich bin mit einem lazily geladen geholt Ergebnisse Controller so dass ich es so tat:
- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView {
[self.tableView reloadData];
}
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
self.fetchedResultsController.delegate = nil;
self.fetchedResultsController = nil;
}
Allerdings habe ich immer noch das Problem, dass wenn ich auf reload auf der Haupttableview wollen, so dass es Im Hintergrund sieht man, dass die Abschnittsüberschriften immer noch vor dem dunklen Bereich schweben.
Hat jemand eine bessere Lösung dafür?Es scheint ein legitimer Fehler für viewForHeaderInSection und titleForHeaderInSection zu sein, wenn Daten erneut geladen werden, während sie von einem UISearchDisplayController abgedeckt werden.
Die einfachste Antwort für mich ist zu versuchen, die Suchansicht zu überschreiben, so dass Sie die Hintergrundtabelle nicht sehen können. Aber das ist weg von der Appleness der App.
Das gleiche Problem, mehr Screenshots: http://StackOverflow.com/Questions/14994997/UisearchdisplayController-Shows-Header-Section-of-Parent-UseableController – Douglas
Wunderbar, 2 Jahre später ist dies immer noch ein Problem: http: // openradar.appspot.com/14676046 Sieht aus wie Apple nie repariert es, weil sie UISearchDisplayController in iOS 8 ersetzt. – Keab42