2017-09-20 14 views
0

Meine App sah auf allen Geräten gut aus, bis ich es auf dem neuen iPhone X getestet (siehe den beigefügten Screenshot). Suchleiste ist unter Navigationsleiste, und es ist schrecklich. Ich habe versucht, mit neuen sicheren Bereichen zu spielen, kitsForExtendedLayout, aber ohne Erfolg. Vielleicht kann jemand mit diesem Problem helfen.Falsche Ansichten Position auf dem iPhone X

enter image description here

Antwort

0

nach einigen Untersuchungen habe ich herausgefunden, wie mein Problem zu beheben. Ich musste die Suchansicht nach dem sicheren Bereich ausrichten. Siehe folgende Lösung:

if (@available(iOS 11.0, *)) 
{ 
    [self.searchView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    UILayoutGuide *guide = self.view.safeAreaLayoutGuide; 

    [NSLayoutConstraint activateConstraints:@[ 
               [self.searchView.topAnchor constraintEqualToAnchor:guide.topAnchor], 
               [self.searchView.leadingAnchor constraintEqualToAnchor:guide.leadingAnchor], 
               [self.searchView.trailingAnchor constraintEqualToAnchor:guide.trailingAnchor], 
               [NSLayoutConstraint constraintWithItem:self.searchView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44] 
               ]]; 
    } 

Jetzt sieht alles auf allen Geräten gut aus. Hoffe das hilft jemand anderem mit dem ähnlichen Problem. Prost.

0

Die short videos Apple posted about iPhone X (and 8 and 8 Plus) development Adresse genau diese Situation (oder ein Paar, das es ganz in der Nähe ist).

In ihrem Fallstudie der Anpassung der WWDC-App für iPhone X, they find that the search bar isn't set up right in the Videos tab. Das liegt daran, dass sie present sind, und zwar UISearchController, aber der beste Weg, dies in iOS 11 (für alle Geräte) zu handhaben, besteht darin, den Such-Controller stattdessen an das Navigationselement anzuhängen. Wenn Sie immer noch 10 bis iOS müssen bereitstellen zurück (oder früher), können Sie dies von einer Verfügbarkeitsprüfung umgehen:

let searchController = UISearchController(searchResultsController: nil) 
// configure searchController properties 

if #available(iOS 11.0, *) { 
    self.navigationItem.searchController = searchController 
    searchController.isActive = true // to show it now 
} else { 
    present(searchController, animated: true, completion: nil) 
} 

Ebenso sind Sie, eine Suchleiste als Überschrift für eine Tabellenansicht einstellen, you can attach it to the navigation item instead there, too:

if #available(iOS 11.0, *) { 
    self.navigationItem.searchController = searchController 
    searchController.isActive = shouldShowBarNow // made up local variable 
} else { 
    if shouldShowBarNow { 
     self.tableView.tableHeaderView = searchController.searchBar 
    } else { 
     self.tableView.tableHeaderView = nil 
    } 
}