         return constraint
     }
     
-    // MARK:- Pin to other views
-
-    @discardableResult public func pinAboveView(_ otherView: UIView, separation: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        translatesAutoresizingMaskIntoConstraints = false
-        otherView.translatesAutoresizingMaskIntoConstraints = false
-        
-        let constraint = NSLayoutConstraint(item: self,
-                                            attribute: .bottom,
-                                            relatedBy: .equal,
-                                            toItem: otherView,
-                                            attribute: .top,
-                                            multiplier: 1,
-                                            constant: -separation)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        commonSuperviewWithView(otherView).addConstraint(constraint)
-        return constraint
-    }
-    
-    @discardableResult public func pinBelowView(_ otherView: UIView, separation: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        return otherView.pinAboveView(self, separation: separation, priority: priority)
-    }
-    
-    @discardableResult public func pinToLeftOfView(_ otherView: UIView, separation: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        translatesAutoresizingMaskIntoConstraints = false
-        otherView.translatesAutoresizingMaskIntoConstraints = false
-        
-        let constraint = NSLayoutConstraint(item: self,
-                                            attribute: .right,
-                                            relatedBy: .equal,
-                                            toItem: otherView,
-                                            attribute: .left,
-                                            multiplier: 1,
-                                            constant: -separation)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        commonSuperviewWithView(otherView).addConstraint(constraint)
-        return constraint
-    }
-    
-    @discardableResult public func pinToRightOfView(_ otherView: UIView, separation: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        return otherView.pinToLeftOfView(self, separation: separation, priority: priority)
-    }
-    
-    @discardableResult public func pinTrailingFromView(_ otherView: UIView, separation: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        translatesAutoresizingMaskIntoConstraints = false
-        otherView.translatesAutoresizingMaskIntoConstraints = false
-        
-        let constraint = NSLayoutConstraint(item: self,
-                                            attribute: .leading,
-                                            relatedBy: .equal,
-                                            toItem: otherView,
-                                            attribute: .trailing,
-                                            multiplier: 1,
-                                            constant: separation)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        commonSuperviewWithView(otherView).addConstraint(constraint)
-        return constraint
-    }
-    
-    @discardableResult public func pinLeadingToView(_ otherView: UIView, separation: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        return otherView.pinTrailingFromView(self, separation: separation, priority: priority)
-    }
-    
-    @discardableResult public func pinWidthToSameAsView(_ otherView: UIView, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        translatesAutoresizingMaskIntoConstraints = false
-        otherView.translatesAutoresizingMaskIntoConstraints = false
-        
-        let constraint = NSLayoutConstraint(item: self,
-                                            attribute: .width,
-                                            relatedBy: .equal,
-                                            toItem: otherView,
-                                            attribute: .width,
-                                            multiplier: 1,
-                                            constant: 0)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        commonSuperviewWithView(otherView).addConstraint(constraint)
-        return constraint
-    }
-    
-    @discardableResult public func pinHeightToSameAsView(_ otherView: UIView, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        translatesAutoresizingMaskIntoConstraints = false
-        otherView.translatesAutoresizingMaskIntoConstraints = false
-        
-        let constraint = NSLayoutConstraint(item: self,
-                                            attribute: .height,
-                                            relatedBy: .equal,
-                                            toItem: otherView,
-                                            attribute: .height,
-                                            multiplier: 1,
-                                            constant: 0)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        commonSuperviewWithView(otherView).addConstraint(constraint)
-        return constraint
-    }
-
-    @discardableResult public func pinViewsWidthToSame(firstView: UIView, secondView: UIView, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        firstView.translatesAutoresizingMaskIntoConstraints = false
-        secondView.translatesAutoresizingMaskIntoConstraints = false
-
-        let constraint = NSLayoutConstraint(item: firstView,
-                                            attribute: .width,
-                                            relatedBy: .equal,
-                                            toItem: secondView,
-                                            attribute: .width,
-                                            multiplier: 1,
-                                            constant: 0)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        addConstraint(constraint)
-        return constraint
-    }
-    
-    @discardableResult public func pinViewsHeightToSame(firstView: UIView, secondView: UIView, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
-        
-        firstView.translatesAutoresizingMaskIntoConstraints = false
-        secondView.translatesAutoresizingMaskIntoConstraints = false
-        
-        let constraint = NSLayoutConstraint(item: firstView,
-                                            attribute: .height,
-                                            relatedBy: .equal,
-                                            toItem: secondView,
-                                            attribute: .height,
-                                            multiplier: 1,
-                                            constant: 0)
-        
-        if let priority = priority {
-            constraint.priority = priority
-        }
-        
-        addConstraint(constraint)
-        return constraint
-    }
-    
-    
-    
-    // MARK:- Get common superview
-    
-    func commonSuperviewWithView(_ otherView: UIView) -> UIView {
+    private func commonSuperviewWithView(_ otherView: UIView) -> UIView {
         
         var testView = self
         

        return constraints
    }
    
    // MARK: - Match superview attributes
    
    public func matchAttributeToSuperview(_ attribute: NSLayoutAttribute, multiplier: CGFloat = 1, constant: CGFloat = 0, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
        
        translatesAutoresizingMaskIntoConstraints = false
        
        let constraint = NSLayoutConstraint(item: self,
                                            attribute: attribute,
                                            relatedBy: .equal,
                                            toItem: superview,
                                            attribute: attribute,
                                            multiplier: multiplier,
                                            constant: constant)

    }
    
    @discardableResult public func pinToSuperviewBottom(margin: CGFloat, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
        return matchAttributeToSuperview(.bottom, constant: margin, priority: priority, invert: true)
    }
    
    @discardableResult public func pinToSuperviewLeft(margin: CGFloat, priority: UILayoutPriority? = nil) -> NSLayoutConstraint{
