5

Ich präsentiere einen Modal View-Controller mit UIPresentationController. Ich stelle den Rahmen presentedView weniger als die containView der Grenzen mit folgenden Methode:UIPresentationController ändert die Größe, wenn ein anderer View-Controller darüber angezeigt wird

override func frameOfPresentedViewInContainerView() -> CGRect { 
    let myDX = (self.containerView!.bounds.width - 600)/2 
    let myDY = (self.containerView!.bounds.height - 600)/2 
    return self.containerView!.bounds.insetBy(dx: myDX, dy: myDY) 
} 

Alles funktioniert super zu diesem Punkt.

Jetzt präsentiere ich einen anderen View-Controller modal (standardmäßig nicht benutzerdefiniert) über dem aktuell angezeigten modalen View-Controller, der den gesamten Bildschirm einnimmt. So habe ich einen benutzerdefinierten modalen Ansicht-Controller unter dem standardmäßigen Modal View-Controller, der den gesamten Bildschirm abdeckt.

Das Problem ist, wenn ich den Top-View-Controller, der den gesamten Bildschirm abdeckt, entlassen, zeigt sich meine benutzerdefinierte Ansicht Controller deckt den gesamten Bildschirm als auch. Ich möchte, dass die Größe meines benutzerdefinierten Ansichtscontrollers gleich bleibt (kleiner als containerView). Kann ich das irgendwie erreichen?

Jede Hilfe wäre willkommen

+0

Vielleicht können Sie AutoLayout anstelle von Hardcode die Rahmenmaße verwenden? – Koen

Antwort

10

Ich stieß auf das gleiche Problem. Ich konnte es nicht lösen, indem ich Beschränkungen hinzufüge, und -[UIPresentationController containerViewWillLayoutSubviews] wird zu spät genannt (nachdem die abweisende Animation abgeschlossen ist).

Nach einiger Zeit habe ich herausgefunden, dass das Problem scheint, dass die präsentierende Controller-Ansicht aus der View-Hierarchie entfernt wird, wenn Sie mit dem Standard-Vollbild-Präsentations-Stil präsentieren und erneut mit einer vollen Bildschirmgröße hinzugefügt werden wieder gezeigt werden.

In iOS 8 könnten Sie UIModalPresentationOverFullScreen als presentationStyle verwenden, wenn Sie von der kleineren Steuerung präsentieren. Das System wird dann die Sicht des präsentierenden Controllers nicht automatisch entfernen. (-[UIViewController viewWillDisappear:] und so, wird nicht auf dem präsentierenden Controller aufgerufen, wenn Sie dies tun)

Sie könnten auch verwenden UIModalPresentationCustom, die in iOS 7 verfügbar ist, aber dann müssen Sie Ihre eigenen Übergang Animation bereitstellen.