  
  See UIStackView documentation for more info.
 */
-public class StackView : UIView {
+open class StackView : UIView {
     
     /// The axis along which the arranged views are laid out.
-    public var axis: UILayoutConstraintAxis = .horizontal {
+    open var axis: UILayoutConstraintAxis = .horizontal {
         didSet { if axis != oldValue { invalidateLayout() } }
     }
     
     /// The distribution of the arranged views along the stack view’s axis.
-    public var distribution: StackViewDistribution = .fill {
+    open var distribution: StackViewDistribution = .fill {
         didSet { if distribution != oldValue { invalidateLayout() } }
     }
     
     /// The alignment of the arranged subviews perpendicular to the stack view’s axis.
-    public var alignment: StackViewAlignment = .fill {
+    open var alignment: StackViewAlignment = .fill {
         didSet { if alignment != oldValue { invalidateLayout() } }
     }
     
     /// The distance in points between the adjacent edges of the stack view’s arranged views.
-    public var spacing: CGFloat = 0.0 {
+    open var spacing: CGFloat = 0.0 {
         didSet { if spacing != oldValue { invalidateLayout() } }
     }
     
     /// A Boolean value that determines whether the vertical spacing between views is measured from their baselines.
-    public var isBaselineRelativeArrangement = false {
+    open var isBaselineRelativeArrangement = false {
         didSet { if isBaselineRelativeArrangement != oldValue { 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)
        } else {

     
     The stack view also ensures that the arrangedSubviews array is always a subset of its subviews array. This method automatically adds the provided view as a subview of the stack view, if it is not already. When adding subviews, the stack view appends the view to the end of its subviews array. The index only affects the order of views in the arrangedSubviews array. It does not affect the ordering of views in the subviews array.
     */
    open func insertArrangedSubview(_ view: UIView, atIndex stackIndex: Int) {
        if let idx = arrangedSubviews.index(of: view) {
            arrangedSubviews.remove(at: idx)
        }
