Ich habe einen View-Controller, der mit UIModalPresentationCustom
presentation style dargestellt wird. Ich benutze eine benutzerdefinierte UIViewControllerTransitioningDelegate
, um den View-Controller als Sidebar darzustellen (so dass er vom Rand des Bildschirms einblendet und nicht den gesamten Bildschirm einnimmt).
Wenn ich dann jedoch einen anderen View-Controller von diesem mit UIModalPresentationFullScreen
- und dann find den Vollbild-View-Controller präsentiere, wird plötzlich mein zugrunde liegender, benutzerdefinierter Controller auf den gesamten Bildschirm gesetzt. Weiß jemand warum das der Fall ist?
Bearbeiten: Dies ist im Wesentlichen meine animateTransition
-Methode zum Präsentieren der Seitenleiste - ich habe den Großteil des Codes entfernt, um ihn lesbar zu machen. Im Grunde wird der Container aus dem transitionContext abgerufen, und die Ansicht des Zielansicht-Controllers wird dem Container hinzugefügt und animiert.
Edit 2: Wenn ich ein wenig mehr Nachforschungen anstellen möchte, bemerke ich, dass der Frame meiner benutzerdefinierten View-Controller-Ansicht gesetzt wird, wenn der View-Controller über im modalen Stack nicht mehr existiert. Der folgende Stack-Trace führt dazu, dass der Frame als Vollbild gesetzt wird:
%Vor%Ändern des Präsentationsstils durch Zuweisen von:
viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
führt dazu, dass der modale Präsentationscontroller einen Bruchteil des Bildschirms einnimmt, derselbe Bruch wie der ursprünglich dargestellte Ansichtscontroller des UIPresentationController
.
Verwenden von
viewController.modalPresentationStyle = UIModalPresentationOverFullScreen
ist besser für diesen Fall, da sein modaler Controller Vollbild ist.
Ich habe das gleiche Problem. Ich habe versucht, es mit symbolischen Breakpoints zu debuggen und es scheint einige internen Aufruf auf eine Art von Layout-Manager, der dies tut.
Obwohl ich das nicht "lösen" konnte (es scheint mir ein Fehler im SDK zu sein), war es mir möglich, eine Abhilfe zu finden, die das behebt . Grundsätzlich müssen Sie die korrekten Dimensionen der dargestellten Ansicht zu zwei geeigneten Zeitpunkten festlegen. So:
%Vor%Fügen Sie im View-Controller, der mit Ihrem benutzerdefinierten UIPresentationController vorgestellt wurde, Folgendes hinzu:
Und wenn Sie sich fragen: Ja, Sie brauchen es an zwei Orten. Weil seltsamerweise, wenn ich es nur im asideDidAppear-asynchronen Block gemacht habe, wurde es kaputt (in Fullscreen geändert), sobald die Animation beendet ist.
Tags und Links objective-c ios uiviewcontroller presentviewcontroller uimodalpresentationstyle