         return views
     }
 
+    func updateCancelContraints() {
+        self.cancelGroupView.removeConstraints(self.cancelControlConstraints)
+        self.cancelControlConstraints = self.constraintsForViews(self.cancelControls)
+        self.cancelGroupView.addConstraints(self.cancelControlConstraints)
+    }
+
+    func updateActionContraints() {
+        self.actionGroupView.removeConstraints(self.actionControlConstraints)
+        self.actionControlConstraints = self.constraintsForViews(self.actionControlsWithTitle())
+        self.actionGroupView.addConstraints(self.actionControlConstraints)
+    }
+
 
     // MARK: Control positioning
 
     private func setupGroupViews() {
+        self.view.addSubview(self.actionGroupView)
+        self.view.addSubview(self.cancelGroupView)
+
         let setupGroupView: UIView -> Void = { groupView in
             groupView.clipsToBounds = true
             groupView.layer.cornerRadius = CGFloat(self.cornerRadius)

        control.tag = self.actions.count

        self.actions.append(action)
        if isCancelAction {
            self.cancelControls.append(control)
        } else {

        self.view.removeConstraints(self.view.constraints)
        self.setupGroupViews()

        self.updateCancelContraints()
        self.updateActionContraints()
    }

    func handleTaps(sender: UIControl) {
