         ///    such that it's top edge is at the same position. In order to do
         ///    this, we translate it up by half it's height, perform the
         ///    scaling, and then translate it back down by the same amount
+        ///
+        /// On versions of iOS before 11, applying a transform to the parent
+        /// view modifies the frame of subviews immediately to the model value,
+        /// so this transform is applied directly to the snapshot view and not
+        /// the snapshot container view
+        ///
+        /// Note: For some reason, this behaviour only happens in the
+        /// presentation phase; constraints animate as expected on iOS <11 in
+        /// the dismissal 🤷🏽‍♂️
         let transformForSnapshotView = CGAffineTransform.identity
-            .translatedBy(x: 0, y: -presentingViewSnapshotView.frame.origin.y)
+            .translatedBy(x: 0, y: -snapshotViewContainer.frame.origin.y)
             .translatedBy(x: 0, y: ManualLayout.presentingViewTopInset)
-            .translatedBy(x: 0, y: -presentingViewSnapshotView.frame.height / 2)
+            .translatedBy(x: 0, y: -snapshotViewContainer.frame.height / 2)
             .scaledBy(x: scaleForPresentingView, y: scaleForPresentingView)
-            .translatedBy(x: 0, y: presentingViewSnapshotView.frame.height / 2)
+            .translatedBy(x: 0, y: snapshotViewContainer.frame.height / 2)
         
         /// For a recursive modal, the `presentingView` already has rounded
         /// corners so the animation must respect that
         roundedViewForPresentingView.backgroundColor = UIColor.black.withAlphaComponent(0)
         roundedViewForPresentingView.cornerRadius = presentingViewController.isPresentedWithDeck ? Constants.cornerRadius : 0
-        containerView.insertSubview(roundedViewForPresentingView, aboveSubview: presentingViewSnapshotView)
+        containerView.insertSubview(roundedViewForPresentingView, aboveSubview: snapshotViewContainer)
         roundedViewForPresentingView.frame = initialFrame
         
         /// The background view is used to cover up the `presentedView`
         backgroundView.backgroundColor = .black
         backgroundView.translatesAutoresizingMaskIntoConstraints = false
-        containerView.insertSubview(backgroundView, belowSubview: presentingViewSnapshotView)
+        containerView.insertSubview(backgroundView, belowSubview: snapshotViewContainer)
         
         NSLayoutConstraint.activate([
             backgroundView.topAnchor.constraint(equalTo: window.topAnchor),

        presentedViewController.transitionCoordinator?.animate(
            alongsideTransition: { [unowned self] context in
                self.presentAnimation?()
                self.presentingViewSnapshotView.transform = transformForSnapshotView
                self.roundedViewForPresentingView.cornerRadius = Constants.cornerRadius
                self.roundedViewForPresentingView.transform = transformForSnapshotView
                self.roundedViewForPresentingView.backgroundColor = UIColor.black.withAlphaComponent(1 - Constants.alphaForPresentingView)
            }, completion: { _ in
                rootSnapshotView?.removeFromSuperview()
                rootSnapshotRoundedView?.removeFromSuperview()
            }

    /// then generates a new snapshot of the `presentingViewController`'s view,
    /// and then replaces the existing snapshot with it
    private func updateSnapshotView() {
        guard let currentSnapshotView = presentingViewController.view.snapshotView(afterScreenUpdates: true) else {
            return
        }
        
        snapshotView?.removeFromSuperview()
        
        currentSnapshotView.translatesAutoresizingMaskIntoConstraints = false
        snapshotViewContainer.addSubview(currentSnapshotView)
        NSLayoutConstraint.activate([
            currentSnapshotView.topAnchor.constraint(equalTo: snapshotViewContainer.topAnchor),
            currentSnapshotView.leftAnchor.constraint(equalTo: snapshotViewContainer.leftAnchor),
            currentSnapshotView.rightAnchor.constraint(equalTo: snapshotViewContainer.rightAnchor),
            currentSnapshotView.bottomAnchor.constraint(equalTo: snapshotViewContainer.bottomAnchor)
        ])
        
        snapshotView = currentSnapshotView
	}
	
    /// Thie method updates the aspect ratio and the height of the snapshot view
