2017-02-09 3 views
0

ich einen View-Controller von einem Popover segue geöffnet haben - auf dem iPhone zeigt dies öffnet als eine ganze Seite View-Controller (im Grunde modal). Auf dem iPad öffnet es sich als Popover.Swift 3: UISearchBar in Popover Viewcontroller erscheint breiter als erwartet (auf dem iPad)

Beim Öffnen der Ansicht auf dem iPad ist die Suchleiste breiter als die Ansicht des Popover. Dies tritt bei keiner der iPhone Bildschirmgrößen auf - nur iPad (als Popover).

iPad Popover View

Wenn ich bringen die UISearchBar zu konzentrieren (tippen Sie auf das Textfeld) das Problem selbst löst, bis die Ansicht wieder geöffnet:

iPad SearchBar in Focus

iPad SearchBar after Focus

Die UISearchBar ist programmatisch zu einer UIView der gewünschten Dimensionen hinzugefügt. Hier

SearchBarView

ist der Code für die Initialisierung SearchController

 self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     controller.searchResultsUpdater = self 
     controller.dimsBackgroundDuringPresentation = false 
     controller.searchBar.sizeToFit() 
     controller.definesPresentationContext = false; 

     searchBarView.addSubview(controller.searchBar) 
     return controller 
    })() 

ich versucht habe, zu entfernen .sizeToFit() und stattdessen Schlichte auf der Basis eines CGSize

controller.searchBar.sizeThatFits(CGSize(width: 375, height: 44) 

dies nicht funktioniert, jedoch. Ich habe auch versucht, view.setNeedsLayout() und view.LayoutIfNeeded() aufzurufen. Keine davon hat Auswirkungen.

Ich könnte dieses Problem lösen, indem ich die UISearchBar in ViewDidLoad aktiviere, aber nach einer weniger janky Lösung suche.

Danke!

Antwort

0

Nun, das war eine interessante Lektion zum Debuggen von UI-Problemen.

Ich glaube, dies wurde letztlich von der ViewController auf Größe abgeleitet und Größe festgelegt festgelegt festgelegt. Auf verschiedenen iPad Bildschirmgrößen (9,7 "vs 12,9").

dies zu beheben ich die Rahmenbreite der Suchleiste auf das Tableview darunter gesetzt. Ich bin mir nicht sicher, warum die Größe der searchbarview die Breite geändert hat, da sie auf Vorder- und Hinterkante beschränkt ist (Superview).

 if UIDevice.current.userInterfaceIdiom == .pad { 
     self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: Int(tableView.frame.width), height: 44) 
    } 

Obwohl dies funktioniert es das gleiche Problem hat, wenn geteilte Ansicht (für Breiten, wo ein popover Raum angezeigt hat) verwendet wird.

Weitere Vorschläge sind willkommen, aber das ist ein guter Anfang.

--- --- Bearbeiten

Deaktivieren „Größe ändern Ansicht von NIB“ unter Layout im Viewcontroller sowie die Einstellung Größe eine konstante Breite auf Freeform und erklärt das Problem gelöst des VC Ändern der Größe auf dem iPad . Von dort setze ich nur den Rahmen der Suchleiste in viewDidLoad wie folgt:

if UIDevice.current.userInterfaceIdiom == .pad { 
     self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: 375, height: 44) 
    } 

scheint für alle Geräte unabhängig von geteilten Ansicht oder nicht zu arbeiten.Es gibt wahrscheinlich einen besseren Weg, dies zu tun, ohne iPads zu erkennen. Ich denke ich vermisse eine Einstellung in Interface Builder.

Verwandte Themen