[Ios] Wie sollte ich einen UISearchController mit einer adaptiven Benutzerschnittstelle von UISplitView präsentieren?


Answers

Question

Verwenden eines universellen Storyboards mit einer adaptiven UISplitViewController Benutzeroberfläche.

Ich möchte einen Such-Controller auf der primären (Master-) Seite unter Verwendung des folgenden Codes (vom Master-View-Controller) präsentieren:

static NSString * const kCGISearchViewControllerID = @"SearchViewControllerID";

- (IBAction)searchButtonClicked:(UIBarButtonItem *)__unused sender {
    SearchViewController *searchResultsController = [self.storyboard instantiateViewControllerWithIdentifier:kCGISearchViewControllerID];
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:searchResultsController];
    self.searchController.searchResultsUpdater = searchResultsController;
    self.searchController.hidesNavigationBarDuringPresentation = NO;
    [self presentViewController:self.searchController animated:YES completion:nil];
}

Es scheint zunächst korrekt zu funktionieren (unabhängig von der Startausrichtung):

Probleme treten nach der Autorotation auf (die Tastatur ist immer noch sichtbar, der zugrunde liegende Inhalt ist weiterhin abgeblendet, aber die Suchleiste ist verschwunden):

Wenn Sie zurück in die Landschaft drehen, wird die Suchleiste wieder angezeigt, aber ihre Breite ist jetzt falsch:

(Ich habe auch versucht, die titleView des titleView in der titleView . Während sich die titleView korrekt anpasst, sieht der Suchergebnis-Controller immer noch nicht richtig aus.)

Was vermisse ich, damit ein vorgestellter UISearchController sich selbst richtig animiert, während sich die Benutzeroberfläche an die sich ändernden Größenklassen anpasst?

Aktualisieren:

Hinzufügen von self.definesPresentationContext = YES; Ruft die Suchleiste / Ergebnisse in der primären Ansicht auf, aber die Suchleiste animiert unter dieser Navigationsleiste und ist nicht sichtbar. Das andere Problem ist, dass die Höhe der Suchleiste nicht schrumpft, wenn sie sich vom Hochformat (das eine Statusleiste hat) zurück in die Landschaft dreht.