     }
     
     func apply(bounds: CGRect, layouts:[UIView: CGRect]) -> CGRect {
-        let insets = UIEdgeInsets(top: topAnchor.insetValue(layouts), left: leftAnchor.insetValue(layouts), bottom: bottomAnchor.insetValue(layouts), right: rightAnchor.insetValue(layouts))
-        return UIEdgeInsetsInsetRect(bounds, insets)
+        let left = leftAnchor.anchorValue(layouts) ?? bounds.origin.x
+        let top = topAnchor.anchorValue(layouts) ?? bounds.origin.y
+        let right = rightAnchor.anchorValue(layouts) ?? bounds.maxX
+        let bottom = bottomAnchor.anchorValue(layouts) ?? bounds.maxY
+        
+        return CGRect(x: left, y: top, width: right - left, height: bottom - top)
     }
 }
 

    case HCenter(UIView?)
    case Right(UIView?)
    
    func insetValue(layouts:[UIView: CGRect]) -> CGFloat {
        switch self {
        case .Parent:
            return 0
        case .Left(let v):
            return v.flatMap { layouts[$0]?.origin.x } ?? 0
        case .Right(let v):

    case Bottom(UIView?)
    case VCenter(UIView?)
    
    func anchorValue(layouts:[UIView: CGRect]) -> CGFloat? {
        switch self {
        case .Parent:
            return nil
        case .Top(let v):
            return v.flatMap { layouts[$0]?.origin.y } ?? 0
        case .Bottom(let v):
