     /// @param aspectRatio the subview's width/height ratio
     /// @param alignToLast a dictionary where keys are NSLayoutAttribute, the values are the difference between this subview's value on that attribute and the last subview's. (The last subview is the subview which we set layout constraint through SimpleAutoLayout)
     /// @param endWithMargin if passed in, this subview will have this such distance to the bottom border of the superview
-    @discardableResult open func goDown(_ item: UIView, _ distance: CGFloat = 0, w: CGFloat? = nil, h: CGFloat? = nil, aspectRatio: CGFloat? = nil, alignToLast: [NSLayoutConstraint.Attribute: CGFloat]? = nil, endWithMargin: CGFloat? = nil, safeArea: Bool = false) -> SimpleAutoLayout {
+    @discardableResult open func goDown(_ item: UIView, distance: CGFloat = 0, size: [SizingParam: CGFloat]? = nil, alignToLast: [NSLayoutConstraint.Attribute: CGFloat]? = nil, endWithMargin: CGFloat? = nil, safeArea: Bool = false) -> SimpleAutoLayout {
         add(item)
         addConstraint(item, a1: .top, item2: lastItem, a2: .bottom, constant: distance)
-        place(item, alignToLast: alignToLast, w: w, h: h, aspectRatio: aspectRatio)
+        place(item, from: [:], size: size, alignToLast: alignToLast)
         if let endWithMargin = endWithMargin {
             if safeArea, #available(iOS 11, *) {
                 item.bottomAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.bottomAnchor, constant: -endWithMargin).isActive = true

    /// @param aspectRatio the subview's width/height ratio
    /// @param alignToLast a dictionary where keys are NSLayoutAttribute, the values are the difference between this subview's value on that attribute and the last subview's. (The last subview is the subview which we set layout constraint through SimpleAutoLayout)
    /// @param endWithMargin if passed in, this subview will have this such distance to the left border of the superview
    @discardableResult open func goLeft(_ item: UIView, _ distance: CGFloat = 0, w: CGFloat? = nil, h: CGFloat? = nil, aspectRatio: CGFloat? = nil, alignToLast: [NSLayoutConstraint.Attribute: CGFloat]? = nil, endWithMargin: CGFloat? = nil, safeArea: Bool = false) -> SimpleAutoLayout {
        add(item)
        addConstraint(item, a1: .right, item2: lastItem, a2: .left, constant:-distance)
        place(item, alignToLast: alignToLast, w: w, h: h, aspectRatio: aspectRatio)
        if let endWithMargin = endWithMargin {
            if safeArea, #available(iOS 11.0, *) {
                item.leftAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leftAnchor, constant: endWithMargin).isActive = true

    }
    
    /// Similar to goLeft but with RTL support
    @discardableResult open func goLeading(_ item: UIView, distance: CGFloat = 0, size: [SizingParam: CGFloat]? = nil, alignToLast: [NSLayoutConstraint.Attribute: CGFloat]? = nil, endWithMargin: CGFloat? = nil, safeArea: Bool = false) -> SimpleAutoLayout {
        add(item)
        addConstraint(item, a1: .trailing, item2: lastItem, a2: .leading, constant:-distance)
        place(item, from: [:], size: [:], alignToLast: alignToLast)
        if let endWithMargin = endWithMargin {
            if safeArea, #available(iOS 11.0, *) {
                item.leadingAnchor.constraint(equalTo: superview.safeAreaLayoutGuide.leadingAnchor, constant: endWithMargin).isActive = true
