     
     // MARK: Layout
     
+    /**
+    Invalidates stack view's layout.
+    
+    In general, you never need to call this method manually. The only reason to call it is when stack view's `distribution` is set to `.FillProportionally` and `intrinsicContentSize` of one of the arranged view changes.
+    */
     public func invalidateLayout() {
         if !invalidated {
             invalidated = true

        }
    }
    
    public func insertArrangedSubview(view: UIView, atIndex stackIndex: Int) {
        if !arrangedSubviews.contains(view) {
            view.translatesAutoresizingMaskIntoConstraints = false

            invalidateLayout()
        }
    }
    
    /// Removes subview from arranged subviews.
    public override func willRemoveSubview(subview: UIView) {
        removeArrangedSubview(subview)
    }
    
    // MARK: Hiding Views
    
    /// Updates stack view's layout to hide/show a given view. The view remains a subview of the stack view, but it's width (or height for vertical stack view) is reduced to 0. This method doesn't change view's `hidden` property.
    public func setArrangedView(view: UIView, hidden: Bool) {
        if hidden {
            hiddenViews.insert(view)
