Angepasster UIViewController, der auf Vollbild geändert wird

8

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.

%Vor%

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%     
simeon 10.08.2014, 04:32
quelle

3 Antworten

4

Ä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.

    
SwiftMatt 29.12.2015 04:27
quelle
2

Versuchen Sie zu verwenden:

%Vor%

Es hat mir in iOS 8.1 geholfen

    
Nadzeya 20.11.2014 20:59
quelle
1

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:

  

Fügen Sie im View-Controller, der mit Ihrem benutzerdefinierten UIPresentationController vorgestellt wurde, Folgendes hinzu:

%Vor%

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.

    
Lukas Petr 19.11.2015 23:46
quelle