UISearchController in Navigationbar versteckt sich nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UISearchController in Navigationbar versteckt sich nicht

    Hallo zusammen,

    wenn ich einen UISearchController unter iOS 11 in der Navigationsleiste anzeige, versteckt sich dieser nicht beim Blättern ... und das macht mich wahnsinnig :cursing:

    Ich stelle gerade eine alte iOS-App auf UISplitView um und möchte dabei in der MasterView eine Suchleiste einblenden. In der Vergangenheit habe ich dies mit einer UISearchBar selber programmiert, nun möchte ich einen UISearchController nutzen:

    Im viewDidLoad des MasterViewControllers (einer UITableView) wird der UISearchController instanziert und dem Navigation-Item zugewiesen:

    Quellcode

    1. self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    2. self.searchController.searchResultsUpdater = self;
    3. self.searchController.dimsBackgroundDuringPresentation = NO;
    4. self.searchController.searchBar.placeholder = @"Search";
    5. self.searchController.searchBar.delegate = self;
    6. if (@available(iOS 11.0, *))
    7. {
    8. self.navigationItem.searchController = self.searchController;
    9. self.navigationItem.hidesSearchBarWhenScrolling = YES;
    10. }
    Alles anzeigen
    Starte ich die App, ist die Suchleiste verborgen und wird beim Wischen nach unten angezeigt. So weit, so gut. Wische ich nun wieder nach oben (die UITableView "bounce-t"), verschwindet die Suchleiste kurz hinter der Navigation-Bar, um beim Heben des Fingers wieder aufzupoppen. Spannend ist, dass dieser Effekt nur auftritt, wenn die Einträge der UITableView keine komplette Seite füllen. Sobald ich "richtig" nach oben blättern kann (und die UITableView nicht bounce-t), funktioniert es.

    Ich bin mir nicht bewusst, in dem Controller irgendwo mit contentOffset o. ä. zu hantieren und die App basiert auf dem Template von Apple (aber natürlich mit Anpassungen z. B. der UITableView). Wenn ich eine Beispiel-App auf Basis des gleichen Templates erstelle und den o. g. Code einfüge, funktioniert es wie erwartet.

    Klar, dass der Fehler irgendwo in meinen Anpassungen liegen muss, aber was könnte es sein bzw. wie könnte ich sinnvoll debuggen? Mir fällt echt nichts mehr ein ?(

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich liebe dieses Forum: Es stärkt die Selbstheilungskräfte, ich habe den Verursacher gefunden ... allerdings kann ich Euch keine gute Erklärung geben! :D

    Wenn ich bei der UINavigationBar die Eigenschaft translucent = TRUE setze, funktioniert alles wie erwartet. Ich hatte im IB dieses Attribut aus optischen Gründen deaktiviert, gefunden habe ich es durch minutiösen Vergleich mit der Beispiel-Applikation.

    Dies ist jetzt das zweite Mal innerhalb von zwei Tagen, dass ich mit merkwürdigen Seiteneffekten von "neuen" iOS-Features zu kämpfen habe: Gestern war es eine Abhängigkeit von contentOffset und estimated rowHeight ... ich glaube, ich öffne dafür noch einen extra Thread.

    Manchmal könnte ich echt k...

    Mattes

    Edit: Ein Erklärungsversuch: Durch Aktivieren der "translucent"-Eigenschaft im IB wird die Größe der UITableView geändert, damit diese hinter der Navigationbar liegt. Als Konsequenz stößt man beim Hochblättern bei kurzen Listen nicht mehr an die View-Grenze. Scheinbar triggerte das Bouncen an der Oberkante der View das Erscheinen des Suchfeldes. Ja, klingt dilettantisch, ist aber alles, was mir halbwegs plausibel erscheint.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von MyMattes () aus folgendem Grund: Erklärungsversuch

  • Alles, was Apple nicht als normal ansieht funktioniert in den neuen iOS Versionen leider nur noch halbherzig oder überhaupt nicht mehr. Sobald man also den vorgesehen Pfad verlässt ist man leider oft auf sich selbst gestellt.

    Mache es einfach so, wie es von Apple vorgesehen ist und gut ist. Dies ist auch der sicherste Weg, dass eine App auch unter zukünftigen iOS Versionen problemlos laufen wird.
  • MCDan schrieb:

    Mache es einfach so, wie es von Apple vorgesehen ist und gut ist. Dies ist auch der sicherste Weg, dass eine App auch unter zukünftigen iOS Versionen problemlos laufen wird.
    Mein Credo und ich freue mir auch immer ein Loch in den Bauch, wenn meine Apps den nächsten Versions- oder Gerätewechsel ohne Anpassung überleben.

    Allerdings qualifiziert sich das Deaktivieren der Eigenschaft "translucent" im IB m. E. nicht als "dirty hack" ... ganz abgesehen davon, dass nicht plausibel ist, warum das Verstecken der SerachBar bei einer durchscheinenden NavigationBar nicht funktionieren sollte.

    Ich halte das definitiv für einen Bug, mal sehen, ob ich über's Wochenende einen Radar einstelle.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Ich halte das definitiv für einen Bug, mal sehen, ob ich über's Wochenende einen Radar einstelle.
    Ich auch. Ich hatte mit UISearchController auch schon viel Spaß. Ich habe eine App vom alten UISearchXX (Wie hieß der nochmal?) auf den neuen umgestellt. Ein Trauerspiel, was vorher noch gut funktioniert hat, ging plötzlich nicht mehr. Der Controller hing in einer UITableView, die wiederum in einem anderen ViewController hing. Was für ein Gefummel, bis das wieder funktioniert hat. :thumbdown:
  • MyMattes schrieb:

    MCDan schrieb:

    Mache es einfach so, wie es von Apple vorgesehen ist und gut ist. Dies ist auch der sicherste Weg, dass eine App auch unter zukünftigen iOS Versionen problemlos laufen wird.
    Mein Credo und ich freue mir auch immer ein Loch in den Bauch, wenn meine Apps den nächsten Versions- oder Gerätewechsel ohne Anpassung überleben.
    Allerdings qualifiziert sich das Deaktivieren der Eigenschaft "translucent" im IB m. E. nicht als "dirty hack" ... ganz abgesehen davon, dass nicht plausibel ist, warum das Verstecken der SerachBar bei einer durchscheinenden NavigationBar nicht funktionieren sollte.

    Ich halte das definitiv für einen Bug, mal sehen, ob ich über's Wochenende einen Radar einstelle.

    Mattes
    Die Eigenschaft nicht "translucent" ist für Apple kein Hack, aber auch nicht das "normale" und somit gewünschte Design. Ich tippe daher mal, dass es von den Entwicklern und der evtl. vorhanden QA nicht wirklich geprüft und somit ggf. fehlerhaft ist.

    Wie bereits oben erwähnt, sollte man nur den von Apple präferierten Weg beschreiten und dieser ist in diesem Fall "translucent" eingeschaltet lassen. ;)