             case .Trailing, .Bottom:
                 constraints += equalAttributes(views: views, attribute: .Bottom)
             case .FirstBaseline:
-                constraints += equalAttributes(views: views, attribute: .FirstBaseline)
+                if #available(iOS 8.0, *) {
+                    constraints += equalAttributes(views: views, attribute: .FirstBaseline)
+                }
             }
             
         case .Vertical:

            }

            if let layoutMarginsView = layoutMarginsView {
                stackViewConstraints.append(constraint(item: self, attribute: .BottomMargin, toItem: layoutMarginsView))
                stackViewConstraints.append(constraint(item: self, attribute: .LeftMargin, toItem: layoutMarginsView))
                stackViewConstraints.append(constraint(item: self, attribute: .RightMargin, toItem: layoutMarginsView))
                stackViewConstraints.append(constraint(item: self, attribute: .TopMargin, toItem: layoutMarginsView))
            }
            
            addConstraints(stackViewConstraints)

    public var spacing: CGFloat = 0
    
    public var layoutMarginsRelativeArrangement = false
    
    override public var layoutMargins: UIEdgeInsets {
        get {
            if #available(iOS 8, *) {
                return super.layoutMargins
            } else {
                return _layoutMargins
            }
        }
        set {
            if #available(iOS 8, *) {
                super.layoutMargins = newValue
            } else {
                _layoutMargins = newValue
                setNeedsUpdateConstraints()
            }
        }
    }
    
    private  var  _layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)

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