2017-06-05 1 views
0

Ich habe einen benutzerdefinierten Übergang zwischen zwei Controller, der in der Nähe der iOS-Mail-App funktioniert, die mit einigen implementierten Scroll-Verhalten auf dem anderen bleibt.iOS - Präsentiert einen View-Controller von einem präsentierten View-Controller ändert seine Höhe

Wenn ich einen neuen Ansichtscontroller aus dem präsentierten Ansichtscontroller, der nicht Vollbildgröße ist, präsentiere, und ich diesen neuen präsentierten Ansichtscontroller verwarf, ändert der vorherige präsentierte Ansichtscontroller seine Höhe und ändert dann die Größe.

Ich weiß, dass dies ein wenig verwirrend sein könnte, aber überprüfen Sie das gif Beispiel unten.

example

Wie Sie sehen können, wenn ich dieses benutzerdefinierte Bild-Picker präsentieren und dann entlassen, die View-Controller, die präsentiert sie auf Vollbild verzerrt und dann ändert die Größe auf den Anfangswert.

Wie kann ich dies verhindern? Ich möchte, dass der ViewController, der den Bilderwähler darstellt, seine Höhe behält.

Nach der Kündigung können Sie sehen, die Größenänderung geschieht.

Einstellen der präsentierenden View-Controller Größe

Da es ein UIViewControllerAnimatedTransitioning ist ich eine benutzerdefinierte Präsentation zu erstellen und die Größe es Set verfügt über einen eigenen identity

class CustomPresentationController: UIPresentationController { 

    override init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController!) { 
     super.init(presentedViewController: presentedViewController, presenting: presentingViewController) 
    } 

    override var frameOfPresentedViewInContainerView: CGRect { 
     let containerBounds = self.containerView?.bounds 
     let origin = CGPoint(x: 0.0, y: ((containerBounds?.size.height)! * 0.05)) 
     let size = CGSize(width: (containerBounds?.size.width)! , height: ((containerBounds?.size.height)! * 0.95)) 
     // Applies the attributes 
     let presentedViewFrame: CGRect = CGRect(origin: origin, size: size) 
     return presentedViewFrame 
    } 

    override func containerViewWillLayoutSubviews() { 
     presentedView?.frame = frameOfPresentedViewInContainerView 
    } 
} 

Jeder Hinweis? danke

+0

try self.automaticallyAdjustsScrollViewInsets = NO – karthikeyan

+0

innerhalb der Bildauswahlklasse oder in der Klasse, in der ich die Präsentation anrufe? –

+0

können Sie Code hinzufügen, der zeigt, wie genau Sie die Größe des VC einstellen, der den Bilderwähler darstellt. –

Antwort

0

Ich denke, das ist, wo das Problem ist. Sie erzwingen die Rahmengröße, die nicht funktioniert. Sie sollten etwas wie preferredContentSize verwenden.

Sie können dies einfach zu der viewDidLoad Ihrer CustomPresentationController hinzufügen.

Alternativ können Sie auch modalPresentationStyle versuchen als "Over Current Context"

Sie können sehr gute Beispiele beziehen sich, wie Sie einen Teil von VC halten kann als transparent here

+0

Ich werde es versuchen, wie Sie sagten. Wenn es irgendwie nicht klappt werde ich euch für ein paar Tipps;) Danke –

+0

Es hat nicht wie erwartet funktioniert. Ich habe versucht, die 'preferedContentSize' auf die von mir gewünschte Größe anzuwenden und ging nach rechts, außer dass sie an den Ursprung in der oberen linken Ecke geklammert wurde, so dass sie einen leeren schwarzen Balken am unteren Rand bekam. Ich muss irgendwie noch die 'frameOfPrenedViewContainerView' implementieren, so dass ich ihren Ursprung auf der linken Seite setzen kann. Ich versuche etwas Ähnliches wie die iOS mail.app zu erstellen, wenn du eine neue E-Mail erstellst, die Animation selbst mit den Gesten. –

+0

Es tut mir leid, aber ich glaube, dass Ihre Herangehensweise an die Lösung etwas falsch ist. Die Ansicht ändert die Größe nach dem Hinzufügen oder Entfernen eines View Controllers. Sind Sie sicher, dass Sie auch für den leeren schwarzen Balken "Over Current Context" verwenden? –

Verwandte Themen