     return lhs.view === rhs.view
 }
 
+@IBDesignable
 public class TZStackView: UIView {
 
     public var distribution: TZStackViewDistribution = .Fill {

        // This removes `hidden` value KVO observers using didSet()
        { self.arrangedSubviews = [] }()
    }
    
    private func registerHiddenListeners(previousArrangedSubviews: [UIView]) {
        for subview in previousArrangedSubviews {
            self.removeHiddenListener(subview)

    }
    
    public var alignment: TZStackViewAlignment = .Fill
    
    @objc @IBInspectable private var axisValue: Int {
        get {
            return axis.rawValue
        }
        set {
            axis = UILayoutConstraintAxis(rawValue: newValue) ?? .Horizontal
        }
    }
    
    @objc @IBInspectable private var alignmentValue: Int {
        get {
            return alignment.rawValue
        }
        set {
            alignment = TZStackViewAlignment(rawValue: newValue) ?? .Fill
        }
    }
    
    @objc @IBInspectable private var distributionValue: Int {
        get {
            return distribution.rawValue
        }
        set {
            distribution = TZStackViewDistribution(rawValue: newValue) ?? .Fill
        }
    }

    @objc @IBInspectable public var spacing: CGFloat = 0
    
    @objc @IBInspectable public var layoutMarginsRelativeArrangement: Bool = false

    public private(set) var arrangedSubviews: [UIView] = [] {
        didSet {
