         let width: CGFloat = leftOffset + button.frame.size.width + rightOffset
         
         containerOpenSize = CGSize(width: width, height: height)
-        let baseButtonCenterY: CGFloat = height - button.frame.size.height / 2.0
-        baseButtonOpenCenter = CGPoint(x: leftOffset + button.frame.size.width / 2.0, y: baseButtonCenterY)
+        var baseButtonCenterY: CGFloat = 0
+        
+        switch itemsPosition {
+        case .up:
+            baseButtonCenterY = containerOpenSize.height - button.frame.size.height / 2.0
+        case .down:
+            baseButtonCenterY = button.frame.size.height / 2.0
+        }
+        
+        buttonOpenCenter = CGPoint(x: leftOffset + button.frame.size.width / 2.0, y: baseButtonCenterY)
     }
     
     fileprivate func expandContainers(to: CGRect) {

        let path = CGMutablePath()
        path.move(to: item.center)
        if bouncing {
            let bouncingOffset: CGFloat = itemsInterSpacing * -1
            if opening {
                path.addLine(to: CGPoint(x: center.x, y: center.y + bouncingOffset))
                path.addLine(to: CGPoint(x: center.x, y: center.y - (bouncingOffset / 2.0)))

        var containerFrame = containerView.frame
        containerFrame.origin = origin
        containerFrame.size = containerOpenSize
        containerFrame.origin.x -= buttonOpenCenter.x - button.frame.size.width / 2.0
        if case .up = itemsPosition {
            let yOffset: CGFloat = buttonOpenCenter.y - button.frame.size.height / 2.0
            containerFrame.origin.y -= yOffset
        }
        containerView.frame = containerFrame
        
        button.center = buttonOpenCenter
        
        items.forEach({ $0.itemCenter = button.center })
    }
