 /// If you use subclass LayoutGuide, that manages `LayoutItem` items, than you should use 
 /// `layout(in: frame)` method for apply layout, otherwise items will be have wrong position.
 open class LayoutGuide<Super: LayoutItem>: LayoutItem, InLayoutTimeItem {
+    open var layoutFrame: CGRect { return CGRect(origin: CGPoint(x: frame.origin.x + bounds.origin.x, y: frame.origin.y + bounds.origin.y), size: bounds.size) }
     public var inLayoutTime: InLayoutTimeItem { return self }
     public var superBounds: CGRect { return superItem!.bounds } // TODO: UIView ?
 

        }
    }

    open func layout() {
        if isItemLoaded {
            itemLayout.layout(in: frame)
        }
    }
}

//            }
//        }
    }

    fileprivate func removeItem(_ item: LayoutItem) -> Bool {
        guard let index = items.index(where: { $0 === item }) else { return false }
        
        items.remove(at: index)
        return true
    }

    override open func layout(in rect: CGRect) {
        super.layout(in: rect)
        scheme.layout(in: rect)
    }

    open override func contentRect(forFrame frame: CGRect) -> CGRect {
        let lFrame = super.contentRect(forFrame: frame)
        return insetAnchor?.constrained(sourceRect: lFrame, by: .zero) ?? lFrame
    }

    open /// Asks the layout item to calculate and return the size that best fits the specified size
