Ich habe einen benutzerdefinierten Push-Übergang zwischen View-Controllern, die in einem UINavigationController
eingebettet sind, was mit iOS 7/8 funktioniert, aber ein falsches Layout aufweist, wenn es mit iOS 9 SDK erstellt wird.
Es geht dann weiter und führt eine Animation durch. Das Problem ist, dass der Inhalt von toViewController
den Inhalt hinter der Navigationsleiste darstellt, auch wenn er die automatische Layout-Beschränkung des oberen Layouts verwendet.
Nichtsdestotrotz funktioniert es auf iOS 8 gut und wenn wir ein Neuzeichnen erzwingen (zB das Senden der App an den Hintergrund und das Zurückbringen, ein Modal oben anzeigen und es ablehnen usw.), wird das gesamte automatische Layoutsystem dazu führen Redraw selbst und toViewController
's Ansicht springt an die richtige Stelle (als die oberste Layout-Anleitung, x Pixel aus der Navigationsleiste statt x Pixel vom oberen Rand des Geräts Bildschirm).
Hinzufügen
%Vor% Funktioniert in viewDidAppear:animated
, funktioniert aber nicht in viewDidLoad
oder viewWillAppear:animated
. Dies ist keine Lösung, da die Benutzer die Ansicht springen sehen würden, wenn die Neuzeichnung bei viewDidAppear:animated
Ich habe es geschafft, mein Problem zu beheben, indem ich die folgende Zeile vor addSubview:
:
Aus der Apple Dokumentation für finalFrameForViewController :
Gibt das End-Frame-Rechteck für den angegebenen View-Controller zurück sehen.
Das von dieser Methode zurückgegebene Rechteck repräsentiert die Größe der entsprechenden Ansicht am Ende des Übergangs. Für die Aussicht während der Präsentation abgedeckt wird, der Wert zurückgegeben von diesem Methode könnte CGRectZero sein, aber es könnte auch ein gültiger Frame sein Rechteck.
Tags und Links ios ios9 uinavigationcontroller custom-transition