2016-12-16 3 views
3

Ich mache eine App, bei der das iPad sowohl im Quer- als auch im Hochformat verwendet werden kann. Die Konfiguration meines UIViewControllers ist die folgende:UIViewController aktualisiert die Einschränkungen der Ansicht nicht, wenn sich die Geräteausrichtung ändert

I eine UIViewController mit einem UICollectionView haben, die die folgenden Bedingungen aufweist: oben vorangestellten und unteren Satz mit seiner Super (der Super das ist UIView meiner UIViewController).

Wenn ich eine Zelle tippe, drücke ich eine weitere UIViewController in der UINavigationController, die eine DetailansichtController der Zelle ist. Einfach.

Wenn ich die Geräteausrichtung im ersten View-Controller ändere, werden die Grenzen UICollectionView richtig eingestellt.

Hier kommen meine Problem:

Wenn ich eine Zelle in der UICollectionView auswählen, wird das zweite Detail Viewcontroller angezeigt. Wenn ich dann in diesem zweiten ViewController die Geräteausrichtung ändere und dann wieder in den ersten viewController gehe, wurde die Ansicht meines UIViewController nicht gedreht. Ich weiß nicht warum, ich habe dies ohne Erfolg versucht:

self.view.layoutIfNeeded() in viewDidAppear() meiner FirstViewController Constraints nach der aktuellen Ausrichtung zu aktualisieren, hat es nicht funktioniert. Das hat nicht funktioniert, weil mir eins aufgefallen ist:

Die Rahmenansicht meines ersten ViewControllers ist immer noch dieselbe wie die vorherige Ausrichtung, es hat sich nicht geändert ... Aber wenn ich das Gerät wieder drehe, erkennt das UIViewController Die Ausrichtung ändert sich und die Ansichtsgrenzen sind ordnungsgemäß festgelegt.

Also mein Problem ist: Wenn ich in der zweiten Ansicht Controller bin, und dass ich das Gerät drehen, und dann gehe ich zurück in der vorherigen Ansicht Controller, der vorherige Controller hat nicht die Ausrichtung Änderung erkannt Ich habe gerade in der zweiten Ansicht Controller gemacht.

GIF Demo:

enter image description here

Danach habe ich eine Rotation von Hochformat auf Querformat gemacht, die Ansichtnicht als Debug-Ansicht Hierarchie Werkzeug geändert zeigt unter:

enter image description here

Die UIView ist immer noch im Porträt, so die UICollectionView constraint's kann nicht mit der neuen Ausrichtung aktualisiert werden ...

Irgendwelche Ideen?

Antwort

5

Resolved den Rahmen der Ansicht in meinem ersten Viewcontroller mit den Rastergrenzen im viewWillAppear Verfahren durch Zurücksetzen:

public override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    self.view.frame = UIScreen.main.bounds 
    self.view.layoutIfNeeded() 
} 

So ist der Haupt UIView meinen Viewcontroller den rechten Rahmen hat, und die Beschränkungen können sein automatisch aktualisiert, wenn ich auf meinem UIView layoutIfNeeded() aufrufen.

Verwandte Themen