2017-09-11 4 views
3

In unserem Projekt angegeben wir, dassUISearchController.hidesNavigationBarDuringPresentation ignoriert mit scopeButtons in iOS 11 Beta

hidesNavigationBarDuringPresentation = false 

auf einem bestimmten UIViewController ‚s UISearchController. Der searchController hat ein Array von Bereichsüberschriften. Dies funktioniert bis zu iOS 10, aber in iOS 11 Betas sieht es so aus, als ob die falsche Einstellung von hidesNavigationBarDuringPresentation ignoriert wird und unsere Anzeige durcheinander bringt. Um sicherzustellen, dass es nicht aufgrund anderer Faktoren in meinem Projekt ist, erstellte ich ein blankes Testprojekt mit nur einer einzigen UITableViewController, mit einer UISearchController initialisiert mit einer anderen einfachen UITableViewController. Der folgende Code ist in den viewDidLoad() Verfahren in den Hauptansicht-Controller:

self.title = "Search Bar Scope Test" 
    let searchViewController = SearchViewController(style: .plain) 
    searchController = UISearchController(searchResultsController: searchViewController) 
    searchController!.searchBar.sizeToFit() 
    tableView.tableHeaderView = searchController!.searchBar 
    searchController?.hidesNavigationBarDuringPresentation = false 

    searchController?.searchBar.scopeButtonTitles = ["scope 1", "scope 2", "scope 3", "scope 4", "scope 5"] 

Wenn die letzte Zeile scopeButtonTitles Zuordnung nicht vorhanden ist, hat die Navigationsleiste nicht versteckt bekommen und die Suchleiste bleibt in seiner ursprünglichen Position. Mit dieser Zeile wird jedoch die NavigationBar ausgeblendet und die searchBar sowie die Scope-Schaltflächen werden im Hochformat sowohl auf dem iPhone als auch auf dem iPad nach oben verschoben, bleiben aber im Querformat gleich (auch wenn die Scope- Schaltflächen zahlreich sind und nicht passen in einer Zeile).

Hat sonst noch jemand darauf gestoßen? Ist dies ein Fehler oder erwartetes Verhalten (sicherlich nicht unser gewünschtes Verhalten) in iOS 11, und gibt es eine Problemumgehung?

Danke!

+0

Ich habe kein Problem mit den Scope-Schaltflächen, aber meine gesamte Suchleiste springt aus der Tabellenansicht und wird an den oberen Bildschirmrand angehängt. Verwenden von Xcode 9 GM. –

+0

@ChrisPaveglio Endlich habe ich die Ursache des Problems herausgefunden. Siehe meine Antwort unten. – CodePlumber

+0

Danke, aber das ist nicht ganz mein Problem. Ich brauche mehr Zeit, um es herauszufinden b/c Ich denke, es ist mehr einzigartig. Ich habe ein iPad Layout mit 2 Tabellenansichten nebeneinander und 1 hat die Suchleiste und es sollte nie seine Tabellenansicht verlassen. Ich denke, ich muss einige Dinge umgestalten, bevor ich weiter gehe. –

Antwort

3

OK, fand die Ursache des Problems, während ich ein anderes Problem in Zusammenhang erforschte, dass die searchBar und der Umfang Taste falsch ausgerichtet bekam in iOS 11. Der Schlüssel ist, dass die searchController Konfigurationsschema hat sich geändert in iOS 11, wo searchBar nicht mehr als tableView'sheaderView, stattdessen präsentiert werden soll, sollte die gesamte searchController Teil des navigationItem sein, wie unten dargestellt:

if #available(iOS 11.0, *) { 
    self.navigationItem.searchController = searchController 
    // optional, but apparently due to a bug in iOS 11, 
    // the searchBar and the scope buttons may get too high and mis-aligned 
    // when the nav bar is hidden 
    searchController?.hidesNavigationBarDuringPresentation = false 
} else { 
    tableView.tableHeaderView = searchController!.searchBar 
} 

die wenigen UI Probleme behoben oben Code, den ich zu UISearchBar in iOS erzählt hatte 11, und ist eigentlich in this WWDC 2017 video empfohlen, aber wie ich wünsche, wenn Xcode cou Ich würde eine Warnung an der alten tableHeaderView-Zuweisungszeile geben, das hätte mich und wahrscheinlich die Verwirrung und Forschungszeit einiger anderer Entwickler gerettet.

Verwandte Themen