 
   private let targetPosition: RMessagePosition
 
-  /** The vertical space between the message top to its view controller top */
-  private lazy var viewTopConstraint: NSLayoutConstraint = {
-    if targetPosition != .bottom {
-      return NSLayoutConstraint(
-        item: view, attribute: .bottom, relatedBy: .equal,
-        toItem: superview, attribute: .top, multiplier: 1, constant: 0
-      )
-    } else {
-      return NSLayoutConstraint(
-        item: view, attribute: .top, relatedBy: .equal, toItem: superview,
-        attribute: .bottom, multiplier: 1, constant: 0
-      )
-    }
-  }()
-
-  private lazy var viewTopStartConstraint = viewTopConstraint
-
-  /** The final constant value that should be set for the topToVCTopLayoutConstraint when animating */
-  private var viewTopEndConstraint: NSLayoutConstraint?
+  /** The starting animation constraint for the view */
+  private var viewStartConstraint: NSLayoutConstraint?
+
+  /** The ending animation constraint for the view */
+  private var viewEndConstraint: NSLayoutConstraint?
+
   private var contentViewSafeAreaGuideConstraint: NSLayoutConstraint?
 
   /** The amount of vertical padding/height to add to RMessage's height so as to perform a spring animation without

        initialSpringVelocity: 0,
        options: [.curveEaseInOut, .beginFromCurrentState, .allowUserInteraction],
        animations: {
          self.viewTopConstraint.isActive = false
          self.viewTopConstraint = self.viewTopEndConstraint!
          self.viewTopConstraint.isActive = true
          self.delegate?.animationBlockForPresentation?(self)
          self.view.alpha = self.animationEndAlpha
          self.view.superview!.layoutIfNeeded()

  /** Dismiss the view with a completion block */
  private func animateDismissal(withCompletion completion: (() -> Void)?) {
    assert(view.superview != nil, "view instance must have a superview by this point!")
    guard let viewStartConstraint = viewStartConstraint, let viewEndConstraint = viewEndConstraint else { return }
    isDismissing = true
    DispatchQueue.main.async {
      self.view.superview!.layoutIfNeeded()
