             multiplier: 1,
             constant: -offset)
         superview.addConstraint(bottomOffset)
-    }
-
-    func placeBelow(sibling: UIView, by offset: CGFloat = 0) {
-        let superview = self.superview!
-        if (superview != sibling.superview!) {
-            return
+        return bottomOffset
+    }
+
+    func placeBelow(sibling: UIView, by offset: CGFloat = 0) -> NSLayoutConstraint {
+        let superview = self.superview!
+        if (superview != sibling.superview!) {
+            fatalError("views do not share the same superview")
         }
         setTranslatesAutoresizingMaskIntoConstraints(false)
         sibling.setTranslatesAutoresizingMaskIntoConstraints(false)

    
    // MARK: - centering
    
    func centerChildHorizontally(childView: UIView) {
        childView.setTranslatesAutoresizingMaskIntoConstraints(false)
        let centerHorizontally = NSLayoutConstraint(item: childView,
            attribute: .CenterX,

            multiplier: 1,
            constant: inset)
        superview.addConstraint(pin)
        return pin
    }
    
    func alignVerticallyWith(sibling: UIView) -> NSLayoutConstraint {
        return alignDimension(.CenterY, withSibling: sibling)
    }
    
    func alignHorizontallyWith(sibling: UIView) -> NSLayoutConstraint {
        return alignDimension(.CenterX, withSibling: sibling)
    }

    func matchWidthOf(sibling: UIView) -> NSLayoutConstraint {
        return alignDimension(.Width, withSibling: sibling)
    }

    func matchHeightOf(sibling: UIView) -> NSLayoutConstraint {
        return alignDimension(.Height, withSibling: sibling)
    }
    
    private func alignDimension(dimension: NSLayoutAttribute, withSibling sibling: UIView) -> NSLayoutConstraint {
        let superview = self.superview!
        if (superview != sibling.superview!) {
            fatalError("views do not share the same superview")
        }
        setTranslatesAutoresizingMaskIntoConstraints(false)
        sibling.setTranslatesAutoresizingMaskIntoConstraints(false)
