         /// Override size classes if required
         toViewController.presentationController?.overrideTraitCollection = properties.overridenTraits
             
-        /// Pin to the bottom
+        /// Pin to the bottom or top
+        let anchorConstraint: NSLayoutConstraint = {
+             switch (position) {
+             case .bottom:
+                 return toViewController.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
+             case .top:
+                 return toViewController.view.topAnchor.constraint(equalTo: containerView.topAnchor)
+             }
+         }()
         NSLayoutConstraint.activate([
             toViewController.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
             toViewController.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
-            toViewController.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor),
+            anchorConstraint,
         ])
         
         /// If it's a fixed height, add that constraint

        public let roundCornerRadius: CGFloat?
        public let initialYOffset: CGFloat?

        public enum CardHeight { // swiftlint:disable:this nesting
            case fixed(CGFloat)
            case intrinsicHeight
        }

        public enum Position { // swiftlint:disable:this nesting
            case top
            case bottom
        }

        public enum Kind { // swiftlint:disable:this nesting
            case dismissal
            case presentation(cardHeight: CardHeight = .intrinsicHeight, position: Position = .bottom)
        }


        /// Now move this view offscreen
        let distanceToMove = toViewController.view.frame.height
        let distanceToMoveWithPosition = (position == .bottom) ? distanceToMove : -distanceToMove
        let offScreenTransform = CGAffineTransform(translationX: 0, y: distanceToMoveWithPosition)
        toViewController.view.transform = offScreenTransform
        
        /// Prepare the alpha animation
